了解设计模式 之 结构模式(一) -- 适配器模式

 
设计模式中的结构模式是关于结构的,包括聚合,组合,继承等等,主要使用这些结构来表示程序的逻辑,主要包括下面这些模式:适配器模式(Adapter),桥接模式(Bridge),组合模式(Composite),装饰模式(Decorator),外观模式(Facade),享元模式(Flyweight),代理模式(Proxy)。下面的一些列文章将会逐个讲述。

首先来了解一下适配器模式。

1. 适配器模式(Adapter Pattern)

适配器模式就是两个对象之间的接口的适配,使两个接口不兼容的类可以一起工作,举一个现实点的例子。

比如说朋友去日本出差,让他捎回来一个笔记本,可是这个笔记本使用的是110V的电压,并且用的是两项的插槽,这个时候就要用一个电源适配器了,笔记本插在电源适配器上,适配器接到一个220V的三项的插座上。这个就是一个适配器的例子,在程序中,也可以模拟这种结构,也就实现了适配器模式了。

上边的这个过程用Java语言来进行描述的话,如下所示:

首先是二项插头应该使用的两项插座接口。

Java代码 复制代码  收藏代码
  1. // 两项插座   
  2. public interface Term2PlugSocket {   
  3.        
  4.     public void plugin2term();   
  5.        
  6. }  
	// 两项插座
	public interface Term2PlugSocket {
		
		public void plugin2term();
		
	}


但是现在家里只有三项插座。

Java代码 复制代码  收藏代码
  1. // 三项插座   
  2. public class Term3PlugSocket {   
  3.   
  4.     public void plugin3term() {   
  5.         System.out.println("plug in 3 term socket");   
  6.     }   
  7.   
  8. }  
	// 三项插座
	public class Term3PlugSocket {

		public void plugin3term() {
			System.out.println("plug in 3 term socket");
		}

	}


所以就需要一个2-3项的适配器了。

Java代码 复制代码  收藏代码
  1. // 2-3项插座适配器   
  2. public class Term2to3Adapter implements Term2PlugSocket {   
  3.   
  4.     private Term3PlugSocket term3PlugSocket = null;   
  5.   
  6.     public Term2to3Adapter(Term3PlugSocket term3PlugSocket) {   
  7.         this.term3PlugSocket = term3PlugSocket;   
  8.     }   
  9.   
  10.     @Override  
  11.     public void plugin2term() {   
  12.         System.out.println("execute adapter action");   
  13.   
  14.         // 调用目标的方法   
  15.         term3PlugSocket.plugin3term();   
  16.     }   
  17.   
  18. }  
	// 2-3项插座适配器
	public class Term2to3Adapter implements Term2PlugSocket {

		private Term3PlugSocket term3PlugSocket = null;

		public Term2to3Adapter(Term3PlugSocket term3PlugSocket) {
			this.term3PlugSocket = term3PlugSocket;
		}

		@Override
		public void plugin2term() {
			System.out.println("execute adapter action");

			// 调用目标的方法
			term3PlugSocket.plugin3term();
		}

	}


最后是两项插头,这个相当于Client。

Java代码 复制代码  收藏代码
  1. // 两项插座   
  2. public class Term2Connector {   
  3.   
  4.     // 把插头插入插座   
  5.     public void connect() {   
  6.         Term3PlugSocket term3PlugSocket = new Term3PlugSocket();   
  7.   
  8.         // 2-3项插座适配器   
  9.         Term2PlugSocket adapter = new Term2to3Adapter(term3PlugSocket);   
  10.   
  11.         // 适配3项插座   
  12.         adapter.plugin2term();   
  13.     }   
  14.        
  15.     public static void main(String[] args) {   
  16.         Term2Connector connector = new Term2Connector();   
  17.         connector.connect();   
  18.     }   
  19.   
  20. }  
	// 两项插座
	public class Term2Connector {

		// 把插头插入插座
		public void connect() {
			Term3PlugSocket term3PlugSocket = new Term3PlugSocket();

			// 2-3项插座适配器
			Term2PlugSocket adapter = new Term2to3Adapter(term3PlugSocket);

			// 适配3项插座
			adapter.plugin2term();
		}
		
		public static void main(String[] args) {
			Term2Connector connector = new Term2Connector();
			connector.connect();
		}

	}


适配器模式的定义是:将一个类的接口转换成了客户端需要的接口,使不兼容的接口可以一起工作。

另外,还有一个进一步的话题需要讨论一下,适配器模式其实是分两种的,对象适配器(Object adapter)和类适配器(Class adapter)。上边的例子是对象适配器,而Java是不支持类适配器的,因为类适配器是需要多重继承的。

下面给出适配器模式的类图。

对象适配器:


类适配器:

  • 大小: 12.1 KB
  • 大小: 11.7 KB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值