一步步构建多层架构系列四之设计模式运用篇
2009-02-26 21:51
211 查看
在进入代码之前,来点正规的解释,看设计模式精解里面引用的四人团解释:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。
主要意思是:我们需要一种方法,为一个内容合适但接口不匹配的对象创建一个新的接口。
先来个场景,我们就使用设计模式精解里面的场景,现在有一个图形类,此类的行为有:
设定一个Shape对象的位置
获取一个Shape对象的位置
显示一个Shape对象(display)
填充一个Shape对象(fill)
设置一个Shape对象的颜色
擦除一个Shape对象(undisplay)
目前在我的系统里已经实现了点、线、正方形,现在客户要求我们实现一个圆形,当然了,我们会建立一个Circle类来继承Shape,然后需要去实现display、fill、undisplay方法(其它的方法可以统一在抽象类中实现),但是这时我发现同事已经实现了一个画圆的类,但是他的方法名为displayIt、fillIt、undisplayIt,我们不能直接使用这个类,因为那样无法保持多态性,而有时候,我们也不能要求组件类改写方法名。
这时,适配器模式就派上用场了,看代码:
class Circle :Shape{
private XXCircle pxc;
public Circle(){
pxc = new Circle();
}
public void display(){
pxc.displayIt();
}
}
这样,Shape充当了Target,XXCircle作为被适配对象(Adaptee),Circle作为适配对象(Adapter)。
粗看上去,适配器模式与代理模式非常相象,他们都可视为一个对象提供一个前置,但是适配器模式的用意是改变所要考虑对象的接口,而代理模式并不能改变所代理的对象的接口,在这一点上两个模式有明显的区别。
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。
主要意思是:我们需要一种方法,为一个内容合适但接口不匹配的对象创建一个新的接口。
先来个场景,我们就使用设计模式精解里面的场景,现在有一个图形类,此类的行为有:
设定一个Shape对象的位置
获取一个Shape对象的位置
显示一个Shape对象(display)
填充一个Shape对象(fill)
设置一个Shape对象的颜色
擦除一个Shape对象(undisplay)
目前在我的系统里已经实现了点、线、正方形,现在客户要求我们实现一个圆形,当然了,我们会建立一个Circle类来继承Shape,然后需要去实现display、fill、undisplay方法(其它的方法可以统一在抽象类中实现),但是这时我发现同事已经实现了一个画圆的类,但是他的方法名为displayIt、fillIt、undisplayIt,我们不能直接使用这个类,因为那样无法保持多态性,而有时候,我们也不能要求组件类改写方法名。
这时,适配器模式就派上用场了,看代码:
class Circle :Shape{
private XXCircle pxc;
public Circle(){
pxc = new Circle();
}
public void display(){
pxc.displayIt();
}
}
这样,Shape充当了Target,XXCircle作为被适配对象(Adaptee),Circle作为适配对象(Adapter)。
粗看上去,适配器模式与代理模式非常相象,他们都可视为一个对象提供一个前置,但是适配器模式的用意是改变所要考虑对象的接口,而代理模式并不能改变所代理的对象的接口,在这一点上两个模式有明显的区别。
相关文章推荐
- 一步步构建多层架构系列二之设计模式运用篇
- 运用设计模式构建通用数据库访问类
- 一步步构建多层架构系列一
- Java运用设计模式中的建造者模式构建项目的实例解析
- 【WPF系列】基础学习-WPF设计模式概览
- 【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群-配置Hadoop伪分布模式并运行Wordcount示例(1)
- PHP设计模式系列 - 单例
- 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
- Java设计模式偷跑系列(十八)建模和责任链模式的实现
- 【设计模式系列】结构型模式之Proxy模式
- 【脚本语言系列】关于Python基础知识设计模式,你需要知道的事
- 一看就懂系列之 php设计模式(零)
- 深入理解JavaScript系列(35):设计模式之迭代器模式详解
- 深入理解JavaScript系列(26):设计模式之构造函数模式详解
- Webcast:C#面向对象设计模式纵横谈系列课程
- 深入理解JavaScript系列(31):设计模式之代理模式详解
- 设计模式系列1---独当一面的单例
- 深入理解JavaScript系列(35):设计模式之迭代器模式详解
- 设计模式系列
- 极速理解设计模式系列:3.简单工厂模式(Simple Factory Pattern)