模板方法模式

模板方法可以说是用的最多的一种设计模式了,使用也很简单,就是将一组类似的功能抽出来,在父类中定义,然后让子类实现各自的功能。

模板方法模式定义

模板方法定义了一个算法步骤,并允许子类为一个或多个步骤提供实现。

实现

  1. public abstract class Beverage {
  2. // 定义了算法步骤
  3. final void prepareRecipe() {
  4. boilWater();;
  5. brew();
  6. pourInCup();
  7. }
  8. abstract void brew();
  9. void boilWater() {
  10. System.out.println("boilWater...");
  11. }
  12. void pourInCup() {
  13. System.out.println("pourInCup...");
  14. }
  15. }
  16. public class TeaBeverage extends Beverage{
  17. @Override
  18. void brew() {
  19. System.out.println("brew");
  20. }
  21. }

迭代器模式

该模式我觉得是对“封装变化”这句口号的一个例子,将数组和列表两种不同类型,但它们表现类似从而进行了封装。可以参考 Java 中对 Iterator 的设计实现。优秀的程序员总能发现代码中的可抽象,会变化的一些点。

迭代器模式定义

提供一种方法顺序访问一个聚合对象汇总的各个元素,而又不暴露其内部的表示。

实现

  1. public interface Iterator {
  2. boolean hasNext();
  3. Object next();
  4. }
  5. // 实现迭代器接口
  6. public class PancakeHouseIterator implements Iterator{
  7. List<String> list;
  8. int pos;
  9. public PancakeHouseIterator(List<String> list) {
  10. this.list = list;
  11. this.pos = 0;
  12. }
  13. @Override
  14. public boolean hasNext() {
  15. if (pos >= list.size()) {
  16. return false;
  17. }
  18. return true;
  19. }
  20. @Override
  21. public Object next() {
  22. boolean hasNext = hasNext();
  23. if (!hasNext) {
  24. throw new RuntimeException("not item!");
  25. }
  26. return list.get(pos++);
  27. }
  28. }

组合模式

组合模式定义

允许那你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。(这个定义看不懂)

但从书中的介绍,组合模式就是在类中复用该对象。该对象即可以成为一个整体,也是一个对象中的一部分,类似树结构。