ErBing

往事已经定格,未来还要继续。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

来源: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 }
控制台输出:
可以完成客户需要的功能

UML

类适配器

工作中的场景

posted on 2016-08-24 12:34  ErBing  阅读(269)  评论(0编辑  收藏  举报