模板方法模式
模板方法可以说是用的最多的一种设计模式了,使用也很简单,就是将一组类似的功能抽出来,在父类中定义,然后让子类实现各自的功能。
模板方法模式定义
模板方法定义了一个算法步骤,并允许子类为一个或多个步骤提供实现。
实现
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{@Overridevoid 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;}@Overridepublic boolean hasNext() {if (pos >= list.size()) {return false;}return true;}@Overridepublic Object next() {boolean hasNext = hasNext();if (!hasNext) {throw new RuntimeException("not item!");}return list.get(pos++);}}
组合模式
组合模式定义
允许那你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。(这个定义看不懂)
但从书中的介绍,组合模式就是在类中复用该对象。该对象即可以成为一个整体,也是一个对象中的一部分,类似树结构。
