zoukankan      html  css  js  c++  java
  • 23种设计模式之适配器模式代码实例

    适配器模式属于七种结构性模式(适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式)之一:

    适配器模式又分三种:类的适配器模式、对象的适配器模式、接口的适配器模式。

     适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。

    先看类的适配器模式
    核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口时Targetable,通过Adapter类,将Source的功能扩展到Targetable里,看代码:

    public class Source {  
      
        public void method1() {  
            System.out.println("this is original method!");  
        }  
    } 
        public interface Targetable {  
          
            /* 与原类中的方法相同 */  
            public void method1();  
          
            /* 新类的方法 */  
            public void method2();  
        }  
        public class Adapter extends Source implements Targetable {  
          
            @Override  
            public void method2() {  
                System.out.println("this is the targetable method!");  
            }  
        }  

    下面是测试类:

        public class AdapterTest {  
          
            public static void main(String[] args) {  
                Targetable target = new Adapter();  
                target.method1();  
                target.method2();  
            }  
        }  

    输出:

    this is original method!
    this is the targetable method!

    这样Targetable接口的实现类就具有了Source类的功能。

    对象的适配器模式

    基本思路和类的适配器模式相同,只是将Adapter类作修改,这次不继承Source类,而是持有Source类的实例,以达到解决兼容性的问题。看图:

        public class Wrapper implements Targetable {  
          
            private Source source;  
              
            public Wrapper(Source source){  
                super();  
                this.source = source;  
            }  
            @Override  
            public void method2() {  
                System.out.println("this is the targetable method!");  
            }  
          
            @Override  
            public void method1() {  
                source.method1();  
            }  
        }  

    测试类:

        public class AdapterTest {  
          
            public static void main(String[] args) {  
                Source source = new Source();  
                Targetable target = new Wrapper(source);  
                target.method1();  
                target.method2();  
            }  
        }  

    接口的适配器模式:

    有时候我们写的接口里面有多个抽象方法,我们写实现类的时候,必须全部实现这些抽象方法,有时候没有必要,可以借助抽象类来解决,

    这个抽象类实现该接口,我们一个实体类继承该抽象类就不用重写全部的接口里的方法了。

        public interface Sourceable {  
              
            public void method1();  
            public void method2();  
        }  
        public abstract class Wrapper2 implements Sourceable{  
              
            public void method1(){}  
            public void method2(){}  
        }  
        public class SourceSub1 extends Wrapper2 {  
            public void method1(){  
                System.out.println("the sourceable interface's first Sub1!");  
            }  
        }  
        public class SourceSub2 extends Wrapper2 {  
            public void method2(){  
                System.out.println("the sourceable interface's second Sub2!");  
            }  
        }  
        public class WrapperTest {  
          
            public static void main(String[] args) {  
                Sourceable source1 = new SourceSub1();  
                Sourceable source2 = new SourceSub2();  
                  
                source1.method1();  
                source1.method2();  
                source2.method1();  
                source2.method2();  
            }  
        }  

    输出:

    the sourceable interface's first Sub1!
    the sourceable interface's second Sub2!
  • 相关阅读:
    怎么往mac中finder个人收藏里添加文件夹
    UIView 动画
    添加.pch文件
    声明属性的关键字
    创建app前的环境配置/AppIcon/启动图片
    修改动画的旋转支点
    实现自定义xib和storyboard的加载,
    Quartz2D绘图 及实例:下载进度
    帧动画
    在职研究生第一单元第二单元第三单元第四单元是什么?
  • 原文地址:https://www.cnblogs.com/longhaolove/p/7885504.html
Copyright © 2011-2022 走看看