- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
注:文档内容基本上来自于网上,并加上自己的理解而成。有的觉得网友总结得非常好,就完全照搬下来,供学习之用。然而,有的摘抄并没有加上原链接和出处,请谅解。?Template模式一、?模板方法(Template Method)模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模版方法模式的用意。应用场景:1. ?同一类系统消息有公共部分,具体的各个消息所不同的部分在子类中实现。2. ?图片处理中,jpg, rmp,png也好,他们可能打开文件、读取文件的方法都一样,然而可能处理方法不一样3. 数据库中连接、打开、关闭和使用 可能只有连接不一样,其他的可能一样。这个时候就可以用模板模式很多人可能没有想到,模版方法模式实际上是所有模式中最为常见的几个模式之一,而且很多人可能使用过模版方法模式而没有意识到自己已经使用了这个模式。模版方法模式是基于继承的代码复用的基本技术,模版方法模式的结构和用法也是面向对象设计的核心。模版方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本法方法总汇起来的方法叫做模版方法(template method),这个设计模式的名字就是从此而来。二、?模版方法模式的结构模版方法模式的静态结构如下图所示。?这里涉及到两个角色:抽象模版(AbstractClass)角色有如下的责任:定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤。定义并实现了一个模版方法。这个模版方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。具体模版(ConcreteClass)角色有如下的责任:实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。每一个抽象模版角色都可以有任意多个具体模版角色与之对应,而每一个具体模版角色都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。三、?模板方法模式的示意性代码//?Template?Method?pattern?--?Structural?example??using?System;//?AbstractClassabstract?class?AbstractClass{??//?Methods??abstract?public?void?PrimitiveOperation1();??abstract?public?void?PrimitiveOperation2();??//?The?Template?method??public?void?TemplateMethod()??{????Console.WriteLine(In?AbstractClass.TemplateMethod());????PrimitiveOperation1();????PrimitiveOperation2();??}}//?ConcreteClassclass?ConcreteClass?:?AbstractClass{??//?Methods??public?override?void?PrimitiveOperation1()??{????Console.WriteLine(Called?ConcreteClass.PrimitiveOperation1());??}??public?override?void?PrimitiveOperation2()??{????Console.WriteLine(Called?ConcreteClass.PrimitiveOperation2());??}}///?summary///?Client?test///?/summarypublic?class?Client{??public?static?void?Main(?string[]?args?)??{????//?Create?instance?and?call?template?method????ConcreteClass?c?=?new?ConcreteClass();????c.TemplateMethod();??}}四、?继承作为复用的工具使用继承作为复用的手段必须慎重,C#语言的设计师对使用继承作为复用的工具有着不同层次上的认识。不知其一首先,初学C#的程序员可能不知道什么是继承,或者认为继承是高深
文档评论(0)