常用GoF设计模式--3.doc
文本预览下载声明
常用GoF设计模式--3
2.2.7 适配器模式
适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。当希望复用的类接口不对时,采用适配器使控制之外的一个原有对象与某个接口匹配。
客户端:
public class XYZ
{
public void work()
{
Target tag = new RealizeClass();
tag.Request(); //希望调用Request方法 }
}
服务端接口:
public interface Target
{
public void Request();
}
原服务端实现类RealizeClass,已经不合适
(代码略)
第三方服务类,功能合适:
public class Service
{
public void SpecificRequest() //但是接口不匹配
{
//具体操作方法
}
}public class RealizeClass implements Target
{
private Service service;
public void Request()
{
service = new Service();
service.SpecificRequest(); //进行适配 }
}
2.2.8 模版方法模式
模版方法模式:定义一个操作中的算法骨架,而将算法的具体步骤延迟到子类中实现。模版方法使得子类可以不改变一个算法的结构,既可以重定义该算法的特定步骤。
抽象类代码:
abstract class AbstractClass
{
public abstract void PrimitiveOperation1();
public abstract void PrimitiveOperation2();
public void TemplateMethod() //模版方法,含有算法的骨架
{
PrimitiveOperation1();
PrimitiveOperation2();
}
}public class SubClass extends AbstractClass
{
public void PrimitiveOperation1()
{
//具体实现
}
public void PrimitiveOperation2()
{
//具体实现
}
}public class XYZ
{
public void work()
{
AbstractClass a = new SubClass();
a.TemplateMethod();
}
}
2.2.9 装饰模式
装饰模式可以动态地给一个类添加一些额外的职责,把额外的职责比作对那个类的装饰。可以把系统核心职责封装在被装饰的类中,把额外职责放在装饰类中,称外围职责的类。
图1 装饰模式
特例1:如果只有一个被装饰的类(组件),组件的基类与组件类可以合并,类图如下:
图2 装饰模式特例1
特例2:如果只有一个装饰类,也就不需要装饰的基类,类图如下:
图3 装饰模式特例2
装饰模式代码(图3):
1、被装饰组件:
public class ConcreteComponent
{
public void Operation()
{
被装饰组件的具体操作
}
}
2、装饰组件A:
public class ConcreteDecoratorA extends ConcreteComponent
{
private ConcreteComponent component;
public void setComponent(ConcreteComponent component) //组合进来要装饰的组件对象
{
ponent = component;
}
public void Operation()
{
if(component != null)
{
component.Operation(); //实际上是调用装饰的组件的操作
}A的操作额外职责
}
}
public class XYZ
{
public void work()
{
ConcreteComponent c = new ConcreteComponent();
ConcreteDecoratorA deco1 = new ConcreteDecoratorA();
Deco1.setComponent(c);
Deco1.Operation(); //实际效果为:先调
显示全部