来源:http://www.bjsxt.com/
一、【GOF23设计模式】_适配器模式、对象适配器、类适配器、开发中场景
适配器模式
笔记本电脑只有USB接口,新买的键盘是PS2接口的,需要用适配器转接一下
client:笔记本
adaptee:PS2键盘
target:USB接口
adapter:适配器
1 package com.test.adapter; 2 /** 3 * 适配器(类适配器方式) 4 * (相当于USB和PS/2的转接器) 5 */ 6 public class Adapter extends Adaptee implements Target{ 7 @Override 8 public void handleReq() { 9 super.request(); 10 } 11 } 12 13 package com.test.adapter; 14 /** 15 * 适配器(对象适配器方式,使用了组合的方式跟被适配对象整合) 16 * (相当于USB和PS/2的转接器) 17 */ 18 public class Adapter2 implements Target{ 19 private Adaptee adaptee; 20 21 @Override 22 public void handleReq() { 23 adaptee.request(); 24 } 25 26 public Adapter2(Adaptee adaptee) { 27 super(); 28 this.adaptee = adaptee; 29 } 30 }
1 package com.test.adapter; 2 /** 3 * 客户所期待的接口 4 */ 5 public interface Target { 6 void handleReq(); 7 }
1 package com.test.adapter; 2 /** 3 * 被适配的类 4 * (相当于例子中的PS/2键盘) 5 */ 6 public class Adaptee { 7 public void request(){ 8 System.out.println("可以完成客户需要的功能"); 9 } 10 }
1 package com.test.adapter; 2 /** 3 * 客户端类 4 * (相当于例子中的笔记本,只有USB接口) 5 */ 6 public class Client { 7 public void test1(Target t){ 8 t.handleReq(); 9 } 10 11 public static void main(String[] args) { 12 Client c = new Client(); 13 Adaptee a = new Adaptee(); 14 15 //类适配器方式 16 //Target t = new Adapter(); 17 18 //对象适配器方式 19 Target t = new Adapter2(a); 20 21 c.test1(t); 22 } 23 }
控制台输出:
可以完成客户需要的功能