设计模式之适配器模式

适配器模式

简介

  • 作为两个不兼容接口之间的桥梁,属于结构型模式,适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作
  • 常见的几类适配器
    • 类的适配器模式
      • 想将一个类转换为满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。
    • 对象的适配器模式
      • 想将一个对象转换为满足另一个新接口的对象时,可以创建一个适配器类,持有原类的一个实例,在适配器类的方法中,调用实例的方法即可
    • 接口的适配器模式
      • 不想实现一个接口中所有的方法时,可以创建一个adapter,实现所有的方法,在写别的类的时候,继承adapter类即可

应用场景

  • 电脑需要读卡器读取sd卡的数据,这个时候读卡器就是适配器
  • 日常使用的转换头,如电源转换头,电压转换头
  • jdk种的inputstreamreader就是适配器
  • jdbc也是适配器模式
    • jdbc给出一个客户端通用接口,每一个数据库厂商各自开发jdbc驱动,就是一个介于jdbc接口和数据库引擎接口之间的适配器软件,如图:

image.png

实战

  • 接口适配器模式

    • 创建一个接口类,里面有很多方法
    	public interface Order(){
    		void unifiedorder();
    		void query();
    		void sendRedPack();
    		void refund();
    	}
    
    • 创建一个适配器类,实现接口类
    	public class OrderAdapter implements Order{
    		@Override
    		void unifiedorder(){
    
    		}
    		@Override
    		void query(){
    
    		}
    		@Override
    		void sendRedPack(){
    
    		}	
    		@Override
    		void refund(){
    
    		}
    	}
    
    • 创建一个产品类,实现适配器类,重写其中一些方法
    • 创建另一个产品类,实现适配器类,重写其中一些方法
    	public class aliOrder() extends OrderAdapter{
    		@Override
    		void unifiedorder(){
    			System.out.println("支付订单");
    		}
    		@Override
    		void query(){
    			System.out.println("查询订单");
    		}
    	}
    
    	public class wechatOrder() extends OrderAdapter{
    		@Override
    		void sendRedPack(){
    			System.out.println("发送红包");
    		}	
    	}
    
  • 类的适配器模式

    • 想将一个类转换为满足另一个新接口的类时,创建一个新类,实现新的接口即可
    • 旧的类方法
    	public class OldModule{
    		public void methodA(){
    			System.out.println("old module methodA");
    		}
    	}
    
    
    • 新的类(接口/抽象类),新增b方法
    	public interface NewModule{
    		void methodB();
    		void methodC();
    	}
    
    
    • 创建适配器类,实现旧的类,继承新的类
    	public class Adapter extends OldModule implements NewModule{
    		@Override
    		public void methodB(){
    			System.out.println("new module methodB");
    		}
    
    		@Override
    		public void methodC(){
    			System.out.println("new module methodC");
    		}
    	}
    
    • 测试
    	public class test{
    		public static void main(String[] args){
    			NewModule newModule = new Adapter();
    			newModule.methodB();
    			newModule.methodC();
    		        newModule.methodA();
    		}
    	}
    
    
    

评论

何首污 : 叼毛
渣男 : 456
三群的弟弟 : 123
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×