当前位置: 首页 > news >正文

world做网站北关网站制作

world做网站,北关网站制作,自贡网站seo,php网站建设课程作业设计模式 19 模板模式 Template Pattern 1.定义 模板模式#xff08;Template Pattern#xff09;是一种行为设计模式#xff0c;它定义了一个算法的骨架#xff0c;将一些步骤的具体实现延迟到子类中。在模板模式中#xff0c;定义了一个抽象类#xff0c;其中包含了一个…设计模式 19 模板模式 Template Pattern 1.定义 模板模式Template Pattern是一种行为设计模式它定义了一个算法的骨架将一些步骤的具体实现延迟到子类中。在模板模式中定义了一个抽象类其中包含了一个模板方法template method这个方法定义了算法的基本结构和步骤但其中的具体步骤由子类来实现。 模板模式主要用于在不同子类中封装通用的行为同时保持整体算法结构的一致性。通过模板方法模式使得父类能够控制方法的执行顺序同时细节延迟到子类实现。 2.内涵 模板模式包含以下几个角色 Abstract Class抽象类定义了一个模板方法该方法是算法的骨架其中调用了一系列抽象或具体的步骤。抽象类可能还包含了一些通用的实现这些实现可以在模板方法中直接调用也可以在需要时在子类中覆盖。Concrete Class具体类继承自抽象类并实现了其中的具体步骤。每个具体类可以根据需要实现抽象类中定义的方法并将其组合在一起形成完整的算法。 通过模板模式可以实现代码复用、减少重复代码的编写同时保持算法的统一性和一致性。模板模式能够提供一个稳定的算法框架同时允许子类自由扩展或修改算法的某些部分。 |      AbstractClass   | |----------------------| | templateMethod()   |   | primitiveOperation1()| | primitiveOperation2()| |||||    ConcreteClassA   ||----------------------||# primitiveOperation1()||# primitiveOperation2()||||||   ConcreteClassB    ||----------------------||# primitiveOperation1()||# primitiveOperation2()| AbstractClass抽象类这是模板模式的核心部分抽象类定义了模板方法 templateMethod() 和两个抽象方法 primitiveOperation1() 和 primitiveOperation2()其中 templateMethod() 指定了算法的框架包括一系列调用步骤而 primitiveOperation1() 和 primitiveOperation2() 则是需要在具体子类中实现的具体步骤。 ConcreteClassA 和 ConcreteClassB具体类这是实际实现模板模式的具体子类。它们继承了 AbstractClass 并实现了其中的抽象方法 primitiveOperation1() 和 primitiveOperation2()。每个具体类可能实现完全不同的具体步骤但是它们遵循相同的模板方法结构templateMethod()。 3.使用示例 /*** The Abstract Class defines a template method */ class AbstractClass {/*** The template method defines the skeleton of an algorithm.*/public:void TemplateMethod() const {this-BaseOperation1();this-RequiredOperations1();this-BaseOperation2();this-Hook1();this-RequiredOperation2();this-BaseOperation3();this-Hook2();}protected:void BaseOperation1() const {std::cout AbstractClass says: I am doing the bulk of the work\n;}void BaseOperation2() const {std::cout AbstractClass says: But I let subclasses override some operations\n;}void BaseOperation3() const {std::cout AbstractClass says: But I am doing the bulk of the work anyway\n;}virtual void RequiredOperations1() const 0;virtual void RequiredOperation2() const 0;virtual void Hook1() const {}virtual void Hook2() const {} };/*** Concrete classes have to implement all abstract operations of the base class.* They can also override some operations with a default implementation.*/ class ConcreteClass1 : public AbstractClass {protected:void RequiredOperations1() const override {std::cout ConcreteClass1 says: Implemented Operation1\n;}void RequiredOperation2() const override {std::cout ConcreteClass1 says: Implemented Operation2\n;} };class ConcreteClass2 : public AbstractClass {protected:void RequiredOperations1() const override {std::cout ConcreteClass2 says: Implemented Operation1\n;}void RequiredOperation2() const override {std::cout ConcreteClass2 says: Implemented Operation2\n;}void Hook1() const override {std::cout ConcreteClass2 says: Overridden Hook1\n;} };void ClientCode(AbstractClass *class_) {// ...class_-TemplateMethod();// ... }int main() {std::cout Same client code can work with different subclasses:\n;ConcreteClass1 *concreteClass1 new ConcreteClass1;ClientCode(concreteClass1);std::cout \n;std::cout Same client code can work with different subclasses:\n;ConcreteClass2 *concreteClass2 new ConcreteClass2;ClientCode(concreteClass2);delete concreteClass1;delete concreteClass2;return 0; } 输出 Same client code can work with different subclasses: AbstractClass says: I am doing the bulk of the work ConcreteClass1 says: Implemented Operation1 AbstractClass says: But I let subclasses override some operations ConcreteClass1 says: Implemented Operation2 AbstractClass says: But I am doing the bulk of the work anywaySame client code can work with different subclasses: AbstractClass says: I am doing the bulk of the work ConcreteClass2 says: Implemented Operation1 AbstractClass says: But I let subclasses override some operations ConcreteClass2 says: Overridden Hook1 ConcreteClass2 says: Implemented Operation2 AbstractClass says: But I am doing the bulk of the work anyway 上述代码类图 4.注意事项 在使用模板模式Template Pattern时有一些注意事项需要注意以避免可能的问题和踩坑 抽象类的设计在定义抽象类时需要仔细考虑模板方法中的逻辑和步骤顺序确保所有子类都能正确实现这些步骤。避免在抽象类中定义过多的具体实现应保持抽象类的简洁性只包含框架结构和必要的抽象方法。子类实现的一致性子类在实现抽象方法时需要保持接口一致性确保方法签名和返回类型与父类中定义的一致。否则可能会导致编译错误或运行时异常。算法的扩展性模板模式允许子类修改或扩展算法的某些部分但注意避免过度扩展和修改以免破坏算法的一致性和规范性。确保扩展的功能是相对独立且有必要的。模板方法的执行顺序模板方法定义了算法的执行顺序子类在实现具体步骤时要遵循这个顺序。任何不当的调整可能会导致算法步骤的混乱或错误。继承的关系模板模式使用了继承机制但应该避免过度使用继承导致类层次结构复杂。确保继承关系的合适性和合理性。钩子方法在抽象类中可以定义钩子方法用于控制算法的某些部分是否执行。需要谨慎设计和使用钩子方法避免影响算法的整体结构和正确性。单一职责原则确保每个具体类只负责实现自己的具体步骤遵循单一职责原则避免一个类承担过多的责任和功能。 5.最佳实践 在开发中实现模板模式Template Pattern时可以采用以下一些比较好的经验 合理抽象和分离关注点在设计抽象类时需要将通用的算法步骤抽象出来同时将具体步骤留给具体子类实现。这样可以实现算法的复用和解耦同时方便后续的扩展和修改。使用钩子方法钩子方法是一种可以控制算法流程的手段可以在抽象类中定义一些空方法或默认实现具体子类可以选择性地重写这些方法来影响算法的执行。这样可以在不改变模板方法结构的情况下灵活地扩展和定制算法。保持一致性确保所有具体子类实现的具体步骤都是与抽象类中定义的一致的保持算法的一致性和规范性避免出现错误或混乱。封装变化部分在设计模板模式时将会变化的部分抽象出来以便随时扩展和修改而将不变的部分固定在模板方法中确保算法的稳定性和可维护性。使用工厂方法在具体类的实例化时可以考虑使用工厂方法模式Factory Method Pattern将实例化过程放在具体的工厂类中以便灵活地切换不同的具体子类。 6.总结 通过模板模式可以实现代码复用、减少重复代码的编写同时保持算法的统一性和一致性。模板模式能够提供一个稳定的算法框架同时允许子类自由扩展或修改算法的某些部分。
http://www.hkea.cn/news/14416085/

相关文章:

  • 手机哪里可以做视频网站php律师网站源码
  • 深圳企业网站制作平台官方网站开发需求
  • 长沙本土网站制作公司西安建设工程信息网平台变更
  • 福鼎网站建设培训方维网络的品牌网站建设
  • 南京建站推广公司高端网页制作公司哪家好
  • 万网 网站建设合同深圳航空股份有限公司
  • 大型地方门户网站源码天津 建设执业资格注册中心网站
  • 江苏省住房和城乡建设局网站首页wordpress图标不显示了
  • 徐州网站建设费用北京到安阳火车时刻表查询
  • 做logo那个网站h5 技术做健康类网站
  • 银铃建设通官方网站怎么设置网站默认首页
  • 网站ui设计师网站 信用卡支付接口
  • 佛山外贸网站建站大连公司注册
  • 如何做影视剧网站wordpress地址修改错了无法访问
  • 制作网站需要学什么软件30岁转行做网站设计
  • 网站要咋做外贸网站建设销售常用语
  • 西昌规划和建设局网站安康市城市建设局网站
  • dz论坛怎么做视频网站深圳电器公司招聘
  • 上海网站建设报价如何抓取WordPress文章
  • 哪个网站做系统好wordpress 支持 手机版
  • 深圳市住房建设局网站首页《网站建设方案》
  • 个人做众筹网站合法吗内部网站如何建设
  • 绥化网站建设wordpress设置网址
  • 怎么做微商的微网站北京网站建设建站公司
  • 如何在各大网站发布信息渭南上上国风
  • 晋中建设网站建立网站需要钱吗
  • 网站建设需要的服务器wordpress获取登录这头像
  • 云和网站建设网站开发最佳实践
  • 深圳制作网站流程河南企业做网站
  • 中山优化网站wordpress 签到