Java 的 23 种设计模式

一. 创建型模式(对象的创建过程及和用户所使用的对象之间的关系.)

  AbstractFactory ( 抽象工厂 )
  FactoryMethod ( 工厂方法 )
  Singleton ( 单态模式 )
  Builder ( 建造者模式 )
  Prototype ( 原型模式 ) 

二.结构型模式(类和对象之间怎么组织起来形成大的结构)

  Adapter ( 适配器模式 )
  Bridge ( 桥接模式 )
  Composite ( 组合模式 )
  Decorator ( 装饰模式 )
  Facade ( 外观模式 )
  Flyweight ( 享元模式 )
  Proxy ( 代理模式 ) 

三.行为型模式(算法以及对象之间的任务分配)

  Chain of Responsibility ( 责任链模式 )
  Command ( 命令模式 )
  Interpreter ( 解释器模式 )
  Iterator ( 迭代器模式 )
  Mediator ( 中介者模式 )
  Memento ( 备忘录模式 )
  Observer ( 观察者模式 )
  State ( 状态模式 )
  Strategy ( 策略模式 )
  TemplateMethod ( 模板方法 )
  Visitor ( 访问者模式 ) 

三.行为型模式(算法以及对象之间的任务分配)
 

  TemplateMethod ( 模板方法 ):   
  概述:  
  定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
  TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

  适用性:

  1. 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

  2. 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。

  首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。

  最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。

  3. 控制子类扩展。


   参与者:

  1.AbstractClass

  定义抽象的原语操作(primitiveoperation),具体的子类将重定义它们以实现一个算法的各步骤。
       实现一个模板方法,定义一个算法的骨架。
       该模板方法不仅调用原语操作,也调用定义在AbstractClass或其他对象中的操作。
       2.ConcreteClass
       实现原语操作以完成算法中与特定子类相关的步骤。

  
  AbstractClass
 1 public abstract class Template {
 2 
 3     /**
 4      * 一次性实现一个算法的不变的部分, 并将可变的行为留给子类来实现
 5      */
 6     public abstract void print();
 7 
 8     public void update() {
 9         System.out.println("开始打印");
10         for (int i = 0; i < 3; i++) {
11             print();
12         }
13     }
14 }
  ConcreteClass
1 public class TemplateConcrete1 extends Template {
2 
3     /**
4      * 算法在子类中的具体实现
5      */
6     public void print() {
7         System.out.println("这是第①个子类的实现");
8     }
9 }
1 public class TemplateConcrete2 extends Template {
2 
3     /**
4      * 算法在子类中的具体实现
5      */
6     public void print() {
7         System.out.println("这是第②个子类的实现");
8     }
9 }
  Test
 1 public class Test {
 2 
 3     public static void main(String[] args) {
 4         TemplateConcrete1 temp1 = new TemplateConcrete1();
 5         temp1.update();
 6         
 7         TemplateConcrete2 temp2 = new TemplateConcrete2();
 8         temp2.update();
 9     }
10 }
  result
1 开始打印
2 这是第①个子类的实现
3 这是第①个子类的实现
4 这是第①个子类的实现
5 开始打印
6 这是第②个子类的实现
7 这是第②个子类的实现
8 这是第②个子类的实现

原文地址:https://www.cnblogs.com/sunjunxi/p/8508718.html