博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式——模板模式
阅读量:5019 次
发布时间:2019-06-12

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

  模板模式——定义一个操作中算法的骨架,而降一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构既可以重定义该算法的某些特定步骤。

  模板模式时为了解决避免子类去重复一项操作而设计的一种模式,假如自己都有一个方法去现实一个操作,并且在子类创建对象时重复进行该操作,那么可以将该操作给父类,让父类去完成这些操作,统一输出。

  它通过把不变行为搬移到超类,去除子类中的重复代码,提供了一个很好的代码复用平台,下面是具体的实现方式。

1.Template类,模板类,定义了一些由子类去实现的抽象方法,并且让子类实现了该方法后再统一的模板方法里去执行

1 ///  2 /// 模板抽象类 3 ///  4 public abstract class Template 5 { 6     //定义一些抽象方法,放到子类去实现 7     public abstract void PrimitiveOperation1(); 8     public abstract void PrimitiveOperation2(); 9 10     /// 11     /// 模板方法,给出了逻辑的骨架12     /// 逻辑的组成是一些相应的抽象操作,13     /// 它们都推迟到子类去实现14     /// 15     public void TemplateMethod()16     {17         PrimitiveOperation1();18         PrimitiveOperation2();19 20         //这里也可以做一些额外的事21     }22 }
Template.cs

2.Operation类,子类,实现了模板类定义的抽象方法

1 ///  2 /// 继承模板的子类A 3 ///  4 class OperationA:Template 5 { 6     public override void PrimitiveOperation1() 7     { 8         //子类方法实现这个方法的操作 9     }10 11     public override void PrimitiveOperation2()12     {13         //子类方法实现这个方法的操作14     }15 }16  /// 17 /// 继承模板的子类B18 /// 19 class OperationB : Template20 {21     public override void PrimitiveOperation1()22     {23         //子类方法实现这个方法的操作24     }25 26     public override void PrimitiveOperation2()27     {28         //子类方法实现这个方法的操作29     }30 }
Operation.cs

3.客户端代码,由父类去实例化子类,并且执行模板方法

1 static void Main(string[] args) 2 { 3     //创建模板 4     Template template; 5  6     //实现子类 7     template=new OperationA(); 8  9     //实现模板方法10     template.TemplateMethod();11 12     template=new OperationB();13     template.TemplateMethod();14 }
Program.cs

                                                       以上内容部分参考程杰的《大话设计模式》一书

 

转载于:https://www.cnblogs.com/Smilodon/archive/2013/05/25/3099096.html

你可能感兴趣的文章
JZOJ5146:港湾
查看>>
列表类型内置方法
查看>>
Object、Function、String、Array原生对象扩展方法
查看>>
了解一下 Linux 上用于的 SSH 图形界面工具
查看>>
设计模式之组合模式
查看>>
insertRule()与addRule()创建规则
查看>>
FMDB中 databaseWithPath 的使用问题
查看>>
机器学习好网站
查看>>
python 中的 sys , os 模块用法总结
查看>>
解题:国家集训队 Middle
查看>>
响应者链
查看>>
指针从函数内部带回返回值
查看>>
在使用webView播放flash或视频文件时无法关闭声音的问题
查看>>
redhat 7 源码安装 mysql5.5.49
查看>>
CCP浅谈
查看>>
NAT虚拟网络配置
查看>>
c#部分---需要实例化的内容;
查看>>
销售类
查看>>
技术项目,问题
查看>>
线程池总结
查看>>