• Java与设计模式-适配器模式


         适配器模式是开发中常常会用到的模式,Android开发中常常常使用到的各种adapter就属于适配器模式,连接各种数据库时也要用到适配器模式。

    适配器模式在生活中的实例也随处可见,你托人在日本买了个电饭煲。日本的市电电压是110v,而国内的市电电压是220v,这时你若想安全的使用电饭煲就必须装一个220-110的变压器,这个变压器就能够理解成本模式中的适配器。

     适配器模式有类的适配器模式对象的适配器模式两种不同的形式。首先看一下类的适配器模式UML类图:

    类的适配器模式

    能够看到。目标接口中有方法1和方法2,而我们仅仅有方法1,若想得到方法2。能够生成一个Adapter类。

    我们以上面讲到的生活中的样例为例,实现下面代码:

    1.我们有的220v。也就是上图中相应的Adaptee:

    package com.adapter.demo;
    
    public class Apply220V {
    	
    	public int get220V(){
    		return 220;
    	}
    
    }
    

    2.想要110v。这里有个110v的接口:

    package com.adapter.demo;
    
    public interface Apply110V {
    
    	int get110v();
    }
    


    3.我们想要110v电压就要实现这个接口:

    package com.adapter.demo;
    
    public class From220vTo110v extends Apply220V implements Apply110V {
    	/**
    	 * 适配器
    	 */
    
    	@Override
    	public int get110v() {
    		return 110;
    	}
    
    	
    }
    

    设计模式的思想,添加这个中间的适配器能够使你的程序更灵活,更能多变。

    假设每次改需求你都有想杀人的冲动,说明你的程序没有好的设计,也就是没实用好设计模式,说明你要重构了。

    这时编写一个測试类:

    package com.adapter.demo;
    
    public class TestClass {
    
    	public static void main(String[] args) {
    
    		From220vTo110v from220vTo110v=new From220vTo110v();
    		System.out.println("输出电压:"+from220vTo110v.get110v());
    	}
    
    }
    

    执行例如以下:

     

    对象的适配器模式

    对象适配器模式不是使用继承关系连接到Adaptee。而是使用代理模式连接到Adaptee类。

    UML类图例如以下:

    这里须要改动的是适配器类:

    package com.adapter.demo;
    
    public class From220vTo110v  implements Apply110V {
    	/**
    	 * 适配器
    	 */
    
    	Apply220V apply220v;
    	public From220vTo110v(Apply220V apply220v) {
    		this.apply220v=apply220v;
    	}
    	public int getApply220v() {
    		return apply220v.get220V();
    	}
    	@Override
    	public int get110v() {
    		return 110;
    	}
    
    	
    }
    


    測试类:

    package com.adapter.demo;
    
    public class TestClass {
    
    	public static void main(String[] args) {
    
    		From220vTo110v from220vTo110v=new From220vTo110v(new Apply220V());
    		System.out.println("输出电压:"+from220vTo110v.get110v());
    	}
    
    }
    

    执行例如以下:

    我们能够看出:类适配器使用对象继承的方式,是静态的定义方式。而对象适配器使用对象组合的方式,是动态组合的方式。对象适配器更为灵活。

     对于类适配器,适配器能够重定义Adaptee的部分行为,相当于子类覆盖父类的部分实现方法。

         对于对象适配器。要重定义Adaptee的行为比較困难,这样的情况下,须要定义Adaptee的子类来实现重定义,然后让适配器组合子类。尽管重定义Adaptee的行为比較困难。可是想要添加一些新的行为则方便的非常,并且新添加的行为可同一时候适用于全部的源。

     

     

    最后:

    设计模式是手段,不是目的,设计模式能够帮我们更好地理解他人的代码。同一时候也能够添加系统的可维护性、可扩展性、稳定性和灵活性。好的系统是须要设计的,设计模式就好像一个高手的内功一样,是须要修炼。须要融会贯通的。

    学习设计模式的道路注定是抽象的、枯燥的。量变产生质变。或许坚持一下走过这个山口,下一个山口就是目的地了。

     

    喜欢的朋友关注我和我的公众号。


     


     

     

      

  • 相关阅读:
    【idea】批量修改文件的换行类型
    【shell】for循环执行sql语句
    【gitlab】创建token供外部git clone
    【idea】修改git源
    【浏览器】 NET::ERR_CERT_INVALID
    mac os 11 Big Sur 根目录无法写入解决办法
    dbeaver把表数据导出csv时字符串自动加双引号问题解决
    spring boot2 jpa分页查询百万级数据内存泄漏
    win10安装MAT并单独配置jdk11
    Transaction silently rolled back because it has been marked as rollback-only
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7068735.html
Copyright © 2020-2023  润新知