设计模式-适配器模式(adapter)

在现有程序以及需求冲突的情况下,在两者之间加个适配器,让两者在适配器的协调下可以正常工作的模式叫适配器模式。


使用继承的适配器

/**
 * 表示现有的程序
 *
 * Created by Administrator on 2018/5/25 0025.
 */
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+"*");
    }

}


/**
 * 表示现在的需求
 *
 * Created by Administrator on 2018/5/25 0025.
 */
public interface Print {

    public abstract void printWeak();

    public abstract void printStrong();

}


/**
 * 扮演适配器角色
 *
 * Created by Administrator on 2018/5/25 0025.
 */
public class PrintBanner extends Banner implements Print {

    public PrintBanner(String string) {
        super(string);
    }

    //对外暴露方法实现,实际是经由适配器调用真实的现有代码完成。
    @Override
    public void printWeak() {
        showWithParen();
    }

    //对外暴露方法实现,实际是经由适配器调用真实的现有代码完成。
    @Override
    public void printStrong() {
        showWithAster();
    }
}

使用委托的适配器

/**
 * 表示现在的实际情况
 *
 * Created by Administrator on 2018/5/25 0025.
 */
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+"*");
    }

}
/**
 * 表示现在的需求
 *
 * Created by Administrator on 2018/5/25 0025.
 */
public interface Print {

    public abstract void printWeak();

    public abstract void printStrong();

}
/**
 * 扮演适配器角色
 *
 * Created by Administrator on 2018/5/25 0025.
 */
public class PrintBanner implements Print {

    private Banner banner;

    private String string;

    public PrintBanner(String string) {
        banner = new Banner(string);
    }

    //对外暴露方法实现,实际是经由适配器调用真实的现有代码完成。
    @Override
    public void printWeak() { banner.showWithParen(); }

    //对外暴露方法实现,实际是经由适配器调用真实的现有代码完成。
    @Override
    public void printStrong() {
        banner.showWithAster();
    }

}


  //类适配器模式
        Print print = new PrintBanner("hello");
        print.printStrong();
        print.printWeak();

猜你喜欢

转载自blog.csdn.net/helianus/article/details/80451642