어느 날 어댑터 모드 --Adapter 디자인 패턴 (래퍼 모드)

우선, 패턴 정보

  실제 생활에서, 당신이 필요로 할 때 두 장치,하지만 장치와 불일치 모두의 인터페이스 사양 연결 (컴퓨터 만 입력-C 인터페이스와 같은,하지만 모니터는 HDMI 인터페이스), 우리는 어댑터가 필요 이때, 어댑터에 화면의 일단에 접속 된 컴퓨터에 연결된 일단. 이 어댑터, 우리는 HDMI 인터페이스 PC 컴퓨터를 다시 구입할 필요가 없습니다, 당신은 우리가 외부 모니터를 연결하는 목표를 달성 할 수있다.

  프로그래밍 분야에서 여러 번 우리의 작업은 클래스가 우리가 원하는 기능을 실현하고 있으며, 그러한 (이 버그를 소개 할 수 수정) 잘 테스트하는 경우, 기존 클래스를 기초로 개발을 계속하는 것입니다,하지만 인터페이스는하지 않습니다 현재 프로그램에 맞춰 환경 기준은 필요가 적절한 변환 한 후 원래의 클래스는 새로운 환경 프로그램에 적응할 수 있도록하는 어댑터 어댑터 (래퍼 래퍼)을 작성, 어댑터 디자인 패턴을 사용합니다.

둘째, 패턴 분류

어댑터 두 가지 모드가 있습니다 :

  • 클래스 어댑터 모드 (상속 어댑터)

  • 객체 어댑터 모드 (대리자 어댑터를 사용)

어댑터 모드 셋째, 역할

  • 대상체 :이 방법은 원하는 특정 비즈니스 요구를 정의하기위한 책임이있다 (예를 들면, 상기 예에서 HDMI 비디오 인터페이스);
  • 클라이언트 요청은 (이미지를 표시하기 위해 제공 대상 HDMI 인터페이스를 사용하여, 상기 예에서, 예를 들어, 디스플레이)의 역할을 정의하여 특정 처리의 사용을 담당 타겟팅;
  • 그 Adaptee가 구성된다 : 소정의 특성을 유지하는 방법 (예를 들면 랩탑 평면 타입 C 인터페이스 출력을 유지);
  • 요구를 충족하는 대상 그 Adaptee의 방법을 사용하여 어댑터 영웅 모드; 어댑터 어댑터

넷째, 샘플 코드

상속 클래스 어댑터를 사용 :

TypeCVideo 类 (그 Adaptee) :

패키지 com.designpattern.cn.adapterpattern;

공공  클래스 TypeCVideo {
     개인 문자열 비디오 콘텐츠;

    public TypeCVideo(String videoContent){
        this.videoContent = videoContent;
    }

    public void typecOut(){
        System.out.println(videoContent);
    }
}
View Code

ShowHdmiVideo类(Target对象):

package com.designpattern.cn.adapterpattern;

public interface ShowHdmiVideo {
    public abstract void HdmiOut();
}
View Code

TypeCToHdmiCable类(Adapter类):

package com.designpattern.cn.adapterpattern;

/**
 * <p>TypeCToHdmiCable TypeC转HDMI线 适配器类</p>
 */
public class TypeCToHdmiCable extends TypeCVideo implements ShowHdmiVideo {

    //TypeC转HDMI线 TypeCToHdmiCable类继承了TypeCVideo类
    public TypeCToHdmiCable(String videoContent){
        super(videoContent);//设置父类的视频内容videoContent字段
    }
    @Override
    public void HdmiOut() {
        typecOut();
    }
}
View Code

测试运行结果:

上面的例子,通过继承TypeCVideo的方式创建新的类,并实现新业务需要的HDMI接口,从而将TypeC中视频流(Video Streaming字符串)从HDMI接口输出处来。

 

使用委托的对象适配器模式:

【委托:委托的意思就是交给他人,自己因为某些原因做不了的事情,将事情吩咐给别人做,在JAVA中,委托就是将某个方法中的实际处理交给其他实例的方法】

将上述ShowHdmiVideo接口改为ShowHdmiVideo类:

package com.designpattern.cn.adapterpattern;

public abstract class ShowHdmiVideo{
    public abstract void HdmiOut();
}
View Code

TypeCToHdmi适配器类修改如下:

package com.designpattern.cn.adapterpattern;

/**
 * <p>TypeCToHdmiCable TypeC转HDMI线 适配器类</p>
 */
public class TypeCToHdmiCable extends ShowHdmiVideo {
    private TypeCVideo typeCVideo;

    public TypeCToHdmiCable(String videoContent){
        this.typeCVideo = new TypeCVideo(videoContent);
    }

    //当适配器HDMI视频输出方法被调用的时候,并不是TypeCToHdmiCable这个适配器类自己进行处理,而是交给了TypeCVideo类实例的typec输出
    public void HdmiOut() {
        typeCVideo.typecOut();
    }
}
View Code

其他定义保持不变,再次运行程序,结果相同:

 

五、相关的设计模式:

  • Bridge桥接模式:Adapter模式用于连接两个接口不同的类;而Bridge模式用于连接类的功能层次结构与实现层次结构。
  • Decorator装饰器模式:Adapter模式用于填补不同接口之间的缝隙(接口不兼容),而Decorator装饰器模式用于在不改变API接口的前提下,增强功能(Spring中的IO流,数据源,都使用了Decorator模式包装)。

추천

출처www.cnblogs.com/zheng-hong-bo/p/11069440.html