模板方法模式
模板方法可以说是用的最多的一种设计模式了,使用也很简单,就是将一组类似的功能抽出来,在父类中定义,然后让子类实现各自的功能。
模板方法模式定义
模板方法定义了一个算法步骤,并允许子类为一个或多个步骤提供实现。
实现
public abstract class Beverage {
// 定义了算法步骤
final void prepareRecipe() {
boilWater();;
brew();
pourInCup();
}
abstract void brew();
void boilWater() {
System.out.println("boilWater...");
}
void pourInCup() {
System.out.println("pourInCup...");
}
}
public class TeaBeverage extends Beverage{
@Override
void brew() {
System.out.println("brew");
}
}
迭代器模式
该模式我觉得是对“封装变化”这句口号的一个例子,将数组和列表两种不同类型,但它们表现类似从而进行了封装。可以参考 Java 中对 Iterator 的设计实现。优秀的程序员总能发现代码中的可抽象,会变化的一些点。
迭代器模式定义
提供一种方法顺序访问一个聚合对象汇总的各个元素,而又不暴露其内部的表示。
实现
public interface Iterator {
boolean hasNext();
Object next();
}
// 实现迭代器接口
public class PancakeHouseIterator implements Iterator{
List<String> list;
int pos;
public PancakeHouseIterator(List<String> list) {
this.list = list;
this.pos = 0;
}
@Override
public boolean hasNext() {
if (pos >= list.size()) {
return false;
}
return true;
}
@Override
public Object next() {
boolean hasNext = hasNext();
if (!hasNext) {
throw new RuntimeException("not item!");
}
return list.get(pos++);
}
}
组合模式
组合模式定义
允许那你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。(这个定义看不懂)
但从书中的介绍,组合模式就是在类中复用该对象。该对象即可以成为一个整体,也是一个对象中的一部分,类似树结构。