博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之四:模板方法模式
阅读量:4147 次
发布时间:2019-05-25

本文共 1765 字,大约阅读时间需要 5 分钟。

设计模式之四:模板方法模式
http://www.taidous.com/thread-48604-1-1.html

(出处: 【泰斗社区】-专注互联网游戏和应用的开发者平台)

      模板方法模式(Template Method Pattern):
      定义:Define the skeleton of an algorithm in an operation,deferring some steps to subclasses . Template Method lets subclasses redefine certain
steps of an algorithm without changing the algorithm's structure.(定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法
的结构即可重定义该算法的某些特定步骤)。
 类图:

  优点:
     1、封装不变部分,扩展可变部分;
     2、提取公共部分代码,便于维护
     3、行为有父类控制,子类实现
     缺点:
     每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象,但是更加符合“单一职责原则”,使得类的内聚性得以提高。

     使用场景:
    1、多个子类有公共的方法,并且逻辑基本相同
    2、重要、复杂的算法,可以把核心算法设计模板方法,周边的相关细节功能则有各个子类实现

    实现

public abstract class AbstractClass   {       //基本方法1       public abstract void PrimitiveOperation1();       //基本方法2       public abstract void PrimitiveOperation2();       //模板方法       public void TemplateMethod()       {           //调用基本方法,完成相关的逻辑           this.PrimitiveOperation1();           this.PrimitiveOperation2();       }    }    //具体模板A代码   public class ConcreteClassA:AbstractClass   {       //实现基本方法1       public override void PrimitiveOperation1()       {          //业务逻辑处理       }       //实现基本方法2       public override void PrimitiveOperation2()       {            //业务逻辑处理       }   }     //具体模板B代码   public class ConcreteClassB:AbstractClass   {       //实现基本方法1       public override void PrimitiveOperation1()       {          //业务逻辑处理       }       //实现基本方法2       public override void PrimitiveOperation2()       {            //业务逻辑处理       }   }    //场景类   public class Client   {       public static void main(String [] args)       {           AbstractClass class1 = new ConcreteClassA();           AbstractClass class2 = new ConcreteClassB();            //调用模板方法           class1.TemplateMethod();           class2.TemplateMethod();       }   }

你可能感兴趣的文章
手绘VS码绘(一):静态图绘制(码绘使用P5.js)
查看>>
手绘VS码绘(二):动态图绘制(码绘使用Processing)
查看>>
基于P5.js的“绘画系统”
查看>>
《达芬奇的人生密码》观后感
查看>>
论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》
查看>>
基于“分形”编写的交互应用
查看>>
《融入动画技术的交互应用》主题博文推荐
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>
Unifrax宣布新建SiFAB™生产线
查看>>
艾默生纪念谷轮™在空调和制冷领域的百年创新成就
查看>>
NEXO代币持有者获得20,428,359.89美元股息
查看>>
Piper Sandler为EverArc收购Perimeter Solutions提供咨询服务
查看>>
RMRK筹集600万美元,用于在Polkadot上建立先进的NFT系统标准
查看>>
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
异常 Java学习Day_15
查看>>
Mysql初始化的命令
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
Servlet进阶和JSP基础
查看>>