胖虎白话学习设计模式之适配器设计模式(Adapter)
2014-01-02 21:42
239 查看
胖虎白话学习设计模式之适配器设计模式(Adapter)
记录胖虎学习设计模式过程,不许勿喷,转载请注明出处!
http://blog.csdn.net/ljphhj
1.存在问题
开发中我们经常会遇到一种情况,客户需要实现的一些功能,我们之前编写的类中已经有实现了(不能修改原先设计好的类),
这样已有的类可以提供客户需要的这种功能,只是方法名不同而已.
那为了不重复造轮子,累死累活的,我们需要怎么解决呢?
那么引入解决方法:适配器设计模式
2.适配器设计模式(Adapter)
该设计模式主要用于:当客户需要我们提供接口实现某个功能时,保留现有类提供给我们的服务,向客户提供他所需要的接口,满足客户需求[Adapter模式允许我们使用现存的类来实现客户类的需求]
通俗地打个比方:就跟手机充电一样,无论你是拿到哪种电压环境下(中国(China) 220V 或者 台湾(Taiwan) 110V),只要通过电源适配器的转换就都可以完成对手机的充电,而不会有问题!(PS:充电适配器将电压转换为客户所需要的12V标准电压了)
在该模式中主要涉及到两种:
1.类适配器
当客户在接口中定义了它想要的行为时,我们提供一个新类来实现接口和扩展现有类,这种方法会创建一个类适配器,将客户的接口调用转变成现有类的方法调用.
2.对象适配器
如果客户没有指定所需要的接口,我们可以使用现有类的实例来创建一个新的子类,这个方法会创建一个对象适配器,将客户的调用转变成现有类的实例
UML图讲述该设计模式要点:
图1:类适配器的UML
图2:对象适配器的UML
3.适配器设计模式的例子代码
类适配器例子代码:
对象适配器例子代码:
记录胖虎学习设计模式过程,不许勿喷,转载请注明出处!
http://blog.csdn.net/ljphhj
1.存在问题
开发中我们经常会遇到一种情况,客户需要实现的一些功能,我们之前编写的类中已经有实现了(不能修改原先设计好的类),
这样已有的类可以提供客户需要的这种功能,只是方法名不同而已.
那为了不重复造轮子,累死累活的,我们需要怎么解决呢?
那么引入解决方法:适配器设计模式
2.适配器设计模式(Adapter)
该设计模式主要用于:当客户需要我们提供接口实现某个功能时,保留现有类提供给我们的服务,向客户提供他所需要的接口,满足客户需求[Adapter模式允许我们使用现存的类来实现客户类的需求]
通俗地打个比方:就跟手机充电一样,无论你是拿到哪种电压环境下(中国(China) 220V 或者 台湾(Taiwan) 110V),只要通过电源适配器的转换就都可以完成对手机的充电,而不会有问题!(PS:充电适配器将电压转换为客户所需要的12V标准电压了)
在该模式中主要涉及到两种:
1.类适配器
当客户在接口中定义了它想要的行为时,我们提供一个新类来实现接口和扩展现有类,这种方法会创建一个类适配器,将客户的接口调用转变成现有类的方法调用.
2.对象适配器
如果客户没有指定所需要的接口,我们可以使用现有类的实例来创建一个新的子类,这个方法会创建一个对象适配器,将客户的调用转变成现有类的实例
UML图讲述该设计模式要点:
图1:类适配器的UML
图2:对象适配器的UML
3.适配器设计模式的例子代码
类适配器例子代码:
package cn.xym.test; /** * 客户Client需要的接口方法为:RequiredMethod * 指定在接口IRequired中 * * @author 胖虎 * */ public class Client { public void saySomeThing(IRequired it){ it.RequiredMethod(); } } package cn.xym.test; public interface IRequired { public void RequiredMethod(); } package cn.xym.test; /** * 该类已经存在,并且提供的函数itselfMethod()可以满足客户端的需求 * * @author 胖虎 * */ public class ExistClass { public void itselfMethod(){ System.out.println("我能满足Client的需求"); } } package cn.xym.test; public class Adapter extends ExistClass implements IRequired{ @Override public void RequiredMethod() { /** * 调用到的是ExistClass中的那个满足Client类的需求的方法 */ this.itselfMethod(); } }
对象适配器例子代码:
package cn.xym.test; /** * 客户Client可能指定了某个类中的某个方法要实现一个功能 * 这时候不是指定接口,那么我们要实现这个类方法,重用原来的存在类的方法 * * @author 胖虎 * */ public class Client { public void saySomeThing(RequiredClass it){ it.RequiredMethod(); } } package cn.xym.test; /** * 该类已经存在,并且提供的函数itselfMethod()可以满足客户端的需求 * * @author Administrator * */ public class ExistClass { public void itselfMethod(){ System.out.println("我能满足Client的需求"); } } package cn.xym.test; /** * 这个类可能是客户那边用了很多年的一个类 * 这个类里面可能有一个方法是满足客户需求的RequiredMethod() * 但是由于我们现存类实现了这个方法,我们不想再去实现这个方法. * * @author 胖虎 * */ public class RequiredClass { public void RequiredMethod(){ //空方法 } } package cn.xym.test; public class Adapter extends RequiredClass { private ExistClass existClass = null; public Adapter(ExistClass existClass) { this.existClass = existClass; } //覆盖掉父方法 @Override public void RequiredMethod() { //super.RequiredMethod(); this.existClass.itselfMethod(); } }
相关文章推荐
- 设计模式学习: Adapter(适配器, Wrapper)模式
- 设计模式学习笔记——适配器(Adapter)模式
- 胖虎白话学习设计模式之建造者设计模式(Builder)
- 胖虎白话学习设计模式之专业术语存在的误解
- 胖虎白话学习设计模式之装饰者设计模式(or包装设计模式)
- 胖虎白话学习设计模式之外观设计模式(Facade)
- 胖虎白话学习设计模式之责任链设计模式(Chain of Responsibility)
- 【工作中学习1】两个设计模式:Singleton(单例)和 Adapter(适配器)
- 设计模式入门学习 适配器Adapter模式
- 设计模式学习之---Adapter(适配器)模式
- 设计模式学习笔记——适配器(Adapter)模式
- 胖虎白话学习设计模式之享元设计模式(FlyWeight)
- 胖虎白话学习设计模式之多线程与单例模式设计模式(Singleton)
- 设计模式学习笔记--适配器(Adapter)模式
- 胖虎白话学习设计模式之依赖倒置原则(Dependence Inversion Principle)
- 设计模式》学习笔记--适配器Adapter
- java设计模式学习笔记---适配器
- Java设计模式—适配器(Adapter)
- 设计模式学习----Adapter(适配器模式)
- [OOAD]设计模式之适配器(Adapter)模式