温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

图解设计模式之Adapter模式

发布时间:2020-03-20 17:39:15 来源:网络 阅读:813 作者:Adam的blog 栏目:开发技术

什么是Adapter模式

 Adapter模式即适配器模式,对于适配器的理解参考现实生活中把交流电转换成直流电的电源适配器,用于填补现有的程序所需的程序之间差异的设计模式就是Adapter模式,有以下两种实现方式:
 1. 类适配器模式(使用继承的适配器)
 2. 对象适配器模式(使用委托的适配器)
所谓继承和委托的区别在哪呢?委托是指将某个方法中的实际处理交给其他实例的方法,继承则是自己进行处理,下面分别看下两种实现方式:

代码清单

这里有一个需要被适配的Banner类

/**
 * 被适配角色:交流100福特电源
 * @author guozhenZhao
 * @date 2018年6月21日
 */
public class Banner {
    private String string;

    public Banner(String string) {
        super();
        this.string = string;
    }

    public void showWithParen() {
        System.out.println("("+ string +")");
    }

    public void showWithAster() {
        System.out.println("*"+ string +"*");
    }
}

还有一个接口和一个抽象类

public interface Print {
    public abstract void printWeak();
    public abstract void printStrong();
}
public abstract class PrintTwo {
    public abstract void printWeak();
    public abstract void printStrong();
}

下面看一下两种方式的区别:
1. 使用继承的适配器

/**
 * 使用继承的适配器
 * @author guozhenZhao
 * @date 2018年6月20日
 */
public class PrintBanner extends Banner implements Print {

    public PrintBanner(String string) {
        super(string);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void printWeak() {
        // TODO Auto-generated method stub
        showWithParen();
    }

    @Override
    public void printStrong() {
        // TODO Auto-generated method stub
        showWithAster();
    }

}

2.使用委托的适配器

/**
 * 使用委托的适配器
 * @author guozhenZhao
 * @date 2018年6月21日
 */
public class PrintBannerTwo extends PrintTwo {
    private Banner banner;

    public PrintBannerTwo(String string) {
        super();
        this.banner = new Banner(string);
    }

    @Override
    public void printWeak() {
        // TODO Auto-generated method stub
        banner.showWithParen();
    }

    @Override
    public void printStrong() {
        // TODO Auto-generated method stub
        banner.showWithAster();
    }

}

当PrintBanner类的printWeak方法被调用时,并不是PrintBanner类自己进行处理,而是交给了其他类的实例的某些方法

什么时候使用适配器模式呢

有一些现有的类可以被我们重复使用时,我们可以使用适配器将这些类作为组件重复利用,另外适配器模式用于连接接口(API)不同的类

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI