• 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 这是第②个子类的实现
    
    
  • 相关阅读:
    自定义控件省市区:仿苹果级联菜单
    【数据存储】SQLite数据库存储(10) 操作通讯记录的ContentProvider
    js跨域的理解与实现
    HTML5学习笔记
    [置顶] 高效前端优化工具Fiddler入门教程
    iis7.0 cpu 限制
    centos下安装apache + subversion(转)
    PHP页面控制访问
    [置顶] 高性能建站之前端优化篇
    [置顶] 构架高性能WEB网站的几点知识
  • 原文地址:https://www.cnblogs.com/sunjunxi/p/8508718.html
Copyright © 2020-2023  润新知