网站建设公司开票开什么内容wordpress 素材站模板
2026/5/21 15:38:39 网站建设 项目流程
网站建设公司开票开什么内容,wordpress 素材站模板,做旅游网站用什么颜色,扬州网站制作哪家好模板方法模式 (Template Method Pattern) 什么是模板方法模式#xff1f; 模板方法模式是一种行为型设计模式#xff0c;它允许你在父类中定义一个算法的框架#xff0c;而将一些步骤的实现延迟到子类中。 简单来说#xff1a;模板方法模式就是模板#xff0c…模板方法模式 (Template Method Pattern)什么是模板方法模式模板方法模式是一种行为型设计模式它允许你在父类中定义一个算法的框架而将一些步骤的实现延迟到子类中。简单来说模板方法模式就是模板父类定义框架子类实现细节。生活中的例子想象一下做菜准备食材 → 烹饪 → 装盘步骤相同具体做法不同考试答题 → 交卷步骤相同具体内容不同旅游订票 → 出行 → 游玩 → 返回步骤相同具体安排不同为什么需要模板方法模式传统方式的问题// 每个子类都要重复定义框架classA{publicvoiddoSomething(){step1();step2();step3();}}classB{publicvoiddoSomething(){step1();step2();step3();}}问题代码重复框架代码重复难以维护修改框架需要修改多个类不一致框架可能不一致模板方法模式的优势// 父类定义框架子类实现细节abstractclassTemplate{publicvoiddoSomething(){step1();step2();step3();}protectedabstractvoidstep1();protectedabstractvoidstep2();protectedabstractvoidstep3();}优势代码复用框架代码复用易于维护修改框架只需修改父类一致性框架保持一致扩展容易新增子类很容易模板方法模式的结构┌─────────────────────┐ │ AbstractClass │ 抽象类 ├─────────────────────┤ │ templateMethod() │ │ : void │ │ # primitiveOp1(): │ │ void │ │ # primitiveOp2(): │ │ void │ │ # primitiveOp3(): │ │ void │ └──────────┬──────────┘ │ 继承 ├──┬──────────────────┬──────────────┐ │ │ │ ┌──────────┴──────┐ ┌───────────┴───────┐ ┌───┴────────┐ │ ConcreteClass1 │ │ ConcreteClass2 │ │ ... │ 具体类 ├─────────────────┤ ├───────────────────┤ ├────────────┤ │ primitiveOp1() │ │ primitiveOp1() │ │ │ │ primitiveOp2() │ │ primitiveOp2() │ │ │ │ primitiveOp3() │ │ primitiveOp3() │ │ │ └─────────────────┘ └───────────────────┘ └────────────┘代码示例1. 定义抽象类/** * 抽象类做菜 */publicabstractclassCookDish{/** * 模板方法定义做菜的流程 */publicfinalvoidcook(){prepareIngredients();cookDish();serveDish();}/** * 基本方法准备食材 */protectedabstractvoidprepareIngredients();/** * 基本方法做菜 */protectedabstractvoidcookDish();/** * 基本方法上菜 */protectedabstractvoidserveDish();}2. 定义具体类/** * 具体类做宫保鸡丁 */publicclassKungPaoChickenextendsCookDish{OverrideprotectedvoidprepareIngredients(){System.out.println(准备食材鸡胸肉花生米干辣椒花椒葱姜蒜);}OverrideprotectedvoidcookDish(){System.out.println(做菜步骤);System.out.println(1. 鸡肉切丁腌制);System.out.println(2. 花生米炸香盛起);System.out.println(3. 热锅下油炒鸡丁);System.out.println(4. 加入干辣椒、花椒爆香);System.out.println(5. 调味加入花生米翻炒);}OverrideprotectedvoidserveDish(){System.out.println(上菜宫保鸡丁做好了);}}/** * 具体类做西红柿炒鸡蛋 */publicclassTomatoEggsextendsCookDish{OverrideprotectedvoidprepareIngredients(){System.out.println(准备食材西红柿2个鸡蛋3个葱盐糖);}OverrideprotectedvoidcookDish(){System.out.println(做菜步骤);System.out.println(1. 西红柿切块鸡蛋打散);System.out.println(2. 热锅下油炒鸡蛋盛起);System.out.println(3. 下西红柿炒出汁);System.out.println(4. 加入鸡蛋翻炒调味);}OverrideprotectedvoidserveDish(){System.out.println(上菜西红柿炒鸡蛋做好了);}}3. 使用模板方法/** * 模板方法模式测试类 * 演示如何使用模板方法模式做菜 */publicclassTemplateMethodTest{publicstaticvoidmain(String[]args){System.out.println( 模板方法模式测试 \n);// 做西红柿炒鸡蛋System.out.println(--- 做西红柿炒鸡蛋 ---);CookDishtomatoEggsnewTomatoEggs();tomatoEggs.cook();System.out.println(\n--- 做宫保鸡丁 ---);CookDishkungPaoChickennewKungPaoChicken();kungPaoChicken.cook();System.out.println(\n 模板方法模式的优势 );System.out.println(1. 代码复用框架代码复用);System.out.println(2. 易于维护修改框架只需修改父类);System.out.println(3. 一致性框架保持一致);System.out.println(4. 扩展容易新增子类很容易);System.out.println(5. 控制扩展父类控制扩展点);System.out.println(\n 实际应用场景 );System.out.println(1. ServletHttpServlet的doGet、doPost);System.out.println(2. JDBCJDBC的执行流程);System.out.println(3. SpringJdbcTemplate、RestTemplate);System.out.println(4. 生命周期对象的生命周期管理);System.out.println(5. 算法框架算法框架的实现);System.out.println(\n 钩子方法 );System.out.println(钩子方法是在模板方法中提供扩展点的方法);System.out.println(- 可以在子类中覆盖);System.out.println(- 可以在模板方法中条件调用);System.out.println(- 提供更多的灵活性);}}模板方法模式的优点代码复用框架代码复用易于维护修改框架只需修改父类一致性框架保持一致扩展容易新增子类很容易控制扩展父类控制扩展点模板方法模式的缺点继承限制只能通过继承扩展类数量增加每个实现都需要一个子类适用场景步骤固定算法的步骤固定但具体实现不同代码复用需要复用框架代码控制扩展需要控制扩展点常见应用场景ServletHttpServlet的doGet、doPostJDBCJDBC的执行流程SpringJdbcTemplate、RestTemplate使用建议步骤固定使用模板方法模式代码复用使用模板方法模式步骤不固定直接使用策略模式注意事项⚠️ 模板方法模式虽然有用但要注意不要让模板方法过于复杂考虑使用钩子方法

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询