Osmanthus

空想具現化


  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
  •   

© 2024 Homurax

UV: | PV:

Theme Typography by Makito

Proudly published with Hexo

适配器模式

发布于 2018-08-05 设计模式  适配器模式 

Adapter模式

适配器位于实际情况与需求之间,填补两者之间的差异。这种用于填补“现有的程序”和“所需的程序”之间的差异的设计模式就是Adapter模式。
Adapter模式有以下两种。

  • 类适配器模式(使用继承)
  • 对象适配器模式(使用委托)

类适配器模式

Print.java

public interface Print {
    public void printWeak();
    public void printStrong();
}

Banner.java

public class Banner {
    private String string;
    public Banner(String string) {
        this.string = string;
    }
    public void showWithParen() {
        System.out.println("(" + string + ")");
    }
    public void showWithAster() {
        System.out.println("*" + string + "*");
    }
}

PrintBanner.java

public class PrintBanner extends Banner implements Print {
    public PrintBanner(String string) {
        super(string);
    }
    public void printWeak() {
        showWithParen();
    }
    public void printStrong() {
        showWithAster();
    }
}

对象适配器模式

委托就是指将某个方法中的实际处理交给其他实例的方法。

Print.java

public interface Print {
    public void printWeak();
    public void printStrong();
}

Banner.java

public class Banner {
    private String string;
    public Banner(String string) {
        this.string = string;
    }
    public void showWithParen() {
        System.out.println("(" + string + ")");
    }
    public void showWithAster() {
        System.out.println("*" + string + "*");
    }
}

PrintBanner.java

public class PrintBanner extends Print {
    private Banner banner;
    public PrintBanner(String string) {
        this.banner = new Banner(string);
    }
    public void printWeak() {
        banner.showWithParen();
    }
    public void printStrong() {
        banner.showWithAster();
    }
}

登场角色

Target(对象):定义所需的方法。
Client(请求者):使用Target角色所定义的方法进行具体的处理。
Adaptee(被适配):持有既定方法的角色。
Adapter(适配):使用Adaptee角色中的方法来满则Target角色的需求。

使用继承

使用委托

要点思考

开发中我们经常会用到现有的类,这些类已经被充分测试过,所以我们更愿意将这些类作为组件重复利用。Adapter模式对象有的类适配,生成新的类,通过该模式可以很方便地创建我们需要的方法群。

Adapter模式同样可以用于新旧版本兼容,由新版本充当Adaptee角色,旧版本扮演Targer角色,之后编写一个扮演Adapter角色的类,让它使用新版本的类来实现旧版本的类中的方法。

示例代码出自《图解设计模式》 结城浩

 上一篇: 模板模式 下一篇: 迭代器模式 

© 2024 Homurax

UV: | PV:

Theme Typography by Makito

Proudly published with Hexo