设计模式——适配器模式

栏目: 后端 · 发布时间: 6年前

适配器模式也叫做包装模式;就是把内部结构包装(适配)成用户期待的格式,使得可以兼容使用

通过继承方式使用适配器模式

设计模式——适配器模式
/**
 * @author maikec
 * @date 2019/5/9
 */
public interface Print {
    /**
     * 打印带括号的消息
     */
    void printParen();

    /**
     * 打印带*号的消息
     */
    void printAster();
}

/**
 * 实际使用中的类
 * @author maikec
 * @date 2019/5/9
 */
public class Banner {
    private final String msg;
    public Banner(String msg){
        this.msg = msg;
    }
    public void showWithParen(){
        System.out.println( "(" + msg + ")" );
    }
    public void showWithAster(){
        System.out.println( "*" + msg + "*" );
    }
}

/**
 * @author maikec
 * @date 2019/5/9
 */
public class PrintBannerAdapter extends Banner implements Print {

    public PrintBannerAdapter(String msg) {
        super( msg );
    }

    @Override
    public void printParen() {
        showWithParen();
    }

    @Override
    public void printAster() {
        showWithAster();
    }
}

/**
 * @author maikec
 * @date 2019/5/9
 */
public class AdapterExtendDemo {
    public static void main(String[] args) {
        Print print = new PrintBannerAdapter( "hello adapter" );
        print.printAster(  );
        print.printParen();
    }
}

复制代码

通过引用使用适配器模式

设计模式——适配器模式
/**
 * 需求
 * @author maikec
 * @date 2019/5/9
 */
public abstract class Print {
    /**
     * 打印带括号的消息
     */
    public abstract void printParen();

    /**
     * 打印带*号的消息
     */
    public abstract void printAster();

    public void i(){

    }
}

/**
 * 实际使用中的类
 * @author maikec
 * @date 2019/5/9
 */
public class Banner {
    private final String msg;
    public Banner(String msg){
        this.msg = msg;
    }
    public void showWithParen(){
        System.out.println( "(" + msg + ")" );
    }
    public void showWithAster(){
        System.out.println( "*" + msg + "*" );
    }
}

/**
 * @author maikec
 * @date 2019/5/9
 */
public class PrintBannerAdapter extends Print {
    private Banner banner;

    public PrintBannerAdapter(Banner banner){
        this.banner = banner;
    }
    @Override
    public void printParen() {
        banner.showWithParen();
    }

    @Override
    public void printAster() {
        banner.showWithAster();
    }
}

/**
 * @author maikec
 * @date 2019/5/9
 */
public class AdapterReferenceDemo {
    public static void main(String[] args) {
        Print print = new PrintBannerAdapter( new Banner( "Hello Adapter" ) );
        print.printAster();
        print.printParen();
    }
}

复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

挑战编程技能

挑战编程技能

Brian P. Hogan / 臧秀涛 / 人民邮电出版社 / 2017-2 / 39.00元

新手程序员在具备了理论基础后,面对实际项目时,往往不知道如何解决问题;有经验的程序员在学习了一门新语言后,也会有很多不知道如何使用的特性。针对程序员的这一普遍困惑,资深软件工程师Brian P. Hogan在这本书中总结了57道练习题,教他们如何锤炼技能。这些练习题的难度会逐渐增加,使得编程训练充满挑战又乐趣多多。一起来看看 《挑战编程技能》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具