文章目录
结构性模式(structural patterns)
Adaptor(适配器模式)
将类的接口转换为客户端期望的另一个接口,对旧的不兼容组件进行包装,在新系统中使用旧的组件。
Decorator(装饰器模式)
问题:需要对对象进行任意或者动态的扩展组合
实现:实现一个通用接口作为要扩展的对象,将主要功能委托给基础对象,然后添加功能。并以递归的方式实现。
Decorator抽象类是所有装饰类的基类,里面包含的成员变量指向了被装饰的对象。
代码示例:
public interface IceCream
{
void AddTopping();
}
public class PlainIceCream implements IceCream
{
@Override
public void AddTopping(){
System.out.println("please add");
}
}
public abstract class ToppingDecorator implements IceCream
{
protected IceCream input;
public ToppingDecorator (IceCream i)
{
this.input = i;
}
public abstract void AddTopping();
}
Facade(外观模式)
问题:调用者需要一个简化的接口来调用复杂系统的整体功能。
实现:提供更高层次的接口来使子系统易于使用。
行为类模式
策略模式(Strategy)
问题:针对特定任务存在多种算法,调用者需要根据上下文环境动态的选择和切换。
实现:定义一个算法的接口,每个算法用一个类来实现,客户端针对接口编写程序。
示例:
一个商场支付方式:
代码实现:
模板模式(Template)
应用场景:做事情的步骤一样,但具体方法不同
解决方案:共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现。
使用继承和重写模式(而strategy pattern使用委派方式)
示例:
迭代器模式(Iteretor)
应用场景:用户需要统一的策略来获得一个容器内的所有元素,无论容器的种类
解决方法:使用本模式,用于迭代过程
使用结果:
a. 隐藏了内部container的基本实现
b. 通过使用统一的接口,支持多种遍历策略
c. 易于改变container的类型
d. 促进程序中各个部分的交互