zoukankan      html  css  js  c++  java
  • Adapter适配器模式--图解设计模式

    第二章: Adapter 模式

      Adapter模式分为两种:

        1.类适配器模式

        2.委托适配器

        我看的是《图解设计模式》这本书,这小鬼子说的话真难懂,只能好好看代码理解。

     先说适配器模式要表达的什么意思,首先这个名字就很容易联想到电源适配器,一个道理,我要充电,但你不能让我直接把电线插进插座,这样肯定会冲爆,我用不了这么多电啊! 这时候就需要一个适配器,给电压转换一下充的舒舒服服的,就这意思。

        实际发开中,有一个类库写了很多方法,但我只需要其中一两个,那么就写一个适配器,把这两个方法拿出来用,要是出了Bug,就直接去Adapter里面找,而不是去翻那个类库。

        

      实际编码实现(类适配):

      Banner类所扮演的角色是(Adaptee(被适配)),它内部拥有两个方法,很简单的打印语句:

        

    package example.adapter;
    
    public class Banner {
        private String string;
    
        public Banner(String string) {
            super();
            this.string = string;
        }
    
        public void showWithPeren() {
            System.out.println("(" + string + ")");
        }
    
        public void showWithAster() {
            System.out.println("*" + string + "*");
        }
    }

        

       Print是需求,你需要什么?

     

    package example.adapter;
    
    public interface Print {
        
        public abstract void printWeak();
    
        public abstract void printStrong();
    }

      

      PrintBanner是适配器,实现需求,继承Banner,对外提供Banner的构造和需要的方法:

      

    package example.adapter;
    
    public class PrintBanner extends Banner implements Print{
    
    
    
        public PrintBanner(String string) {
            super(string);
        }
    
        @Override
        public void printWeak() {
            showWithPeren();
        }
    
        @Override
        public void printStrong() {
            showWithAster();
        }
    
    }

     

      Main测试:

    package example.adapter;
    
    public class Main {
        public static void main(String[] args) {
            Print p = new PrintBanner("HelloWorld");
            p.printWeak();
            p.printStrong();
        }
    }    

     

        实际编码实现(委托):

        将Print和PrintBanner稍作改动:

        现在,PrintBanner里面拥有了Banner的成员并在构造方法里面实例化进行调用。

    package example.adapter.two;
    
    public class PrintBanner extends Print{
        
        private Banner banner;
        
        public PrintBanner(String string) {
            super();
            this.banner = new Banner(string);
        }
    
        @Override
        public void printWeak() {
                banner.showWithPeren();
        }
    
        @Override
        public void printStrong() {
                banner.showWithAster();
        }
    
    
    
    }

     

     

      

    package example.adapter.two;
    
    public abstract class Print {
        
        public abstract void printWeak();
    
        public abstract void printStrong();
    }

     

     

      

     

     

      

      

  • 相关阅读:
    WebApi下载附件文件
    zabbix
    redis主从与集群搭建
    redis
    mariadb集群配置(主从和多主)
    使用python执行sql语句和外键解析
    mariadb(四)连接查询,视图,事物,索引,外键
    mariadb(三)查
    mariadb(二)增删改
    firewalld
  • 原文地址:https://www.cnblogs.com/yangchaojie/p/9738154.html
Copyright © 2011-2022 走看看