当前位置: 首页> 游戏> 单机 > 视频推广一条多少钱_网页培训_怎样做好网络营销推广_阿里云免费建站

视频推广一条多少钱_网页培训_怎样做好网络营销推广_阿里云免费建站

时间:2025/8/11 16:39:06来源:https://blog.csdn.net/m0_73629745/article/details/144797309 浏览次数:0次
视频推广一条多少钱_网页培训_怎样做好网络营销推广_阿里云免费建站

模板模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法的骨架,并允许子类为一个或多个步骤提供具体实现。通过这种方式,模板模式使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。首先举个作者在实习中遇到的东西,还是接上文的抽奖时遇到的事情,首先我们抽奖进行判断,抽奖前我们采用的是责任链,抽奖中采用的是决策树,我们在模板模式中可以定义这两个,至于具体内容,我们可以从子类中进行添加和修改

一、模板模式的定义与用途

模板模式是一种行为型设计模式,它在超类(通常是抽象类)中定义了一个算法的框架或步骤,并将一些步骤的实现延迟到子类中。这种模式允许子类在不改变算法结构的前提下,重新定义算法的特定步骤。模板模式的优点包括:

代码复用:通过将公共代码放在抽象类中,子类可以复用父类的代码。
扩展性好:可以通过增加新的子类来增加新的行为。
封装不变部分,扩展可变部分:模板方法模式把不变的行为搬移到父类中,去除了子类中的重复代码。
符合开闭原则:通过子类实现扩展,不需要修改抽象类。
控制子类扩展:模板方法可以通过钩子方法来控制子类的扩展。
模板模式主要用于在多个子类中复用相同的算法结构,同时提供一定的灵活性,使得每个子类可以根据需要实现特定的步骤。

二、模板模式的组成

模板模式通常由以下几个部分组成:

抽象类(Abstract Class):
定义算法的骨架和步骤,通常是抽象的。
包含一个或多个抽象方法(由子类实现)以及一个或多个钩子方法(可以被子类覆盖或使用默认实现)。
具体子类(Concrete Class):
实现抽象类中定义的抽象方法,提供具体的行为。
根据抽象类定义的算法框架,填充具体的实现细节。
钩子方法(Hook Method):
在抽象类中定义的可以被子类覆盖的方法,用于在算法的特定点提供额外的行为或扩展点。
客户端(Client):
使用抽象类和具体子类,通过调用模板方法来执行算法。
在这里插入图片描述

三、模板模式的实现

以下是一个简单的Java代码示例,展示了模板模式的实现。

示例1:游戏模板

// 抽象类:定义了模板方法和一些基本的方法,子类可以根据需要实现这些方法
abstract class Game {// 模板方法定义了算法的骨架public final void play() {// 初始化游戏initialize();// 开始游戏startPlay();// 结束游戏endPlay();}// 基本方法1,由子类实现abstract void initialize();// 基本方法2,由子类实现abstract void startPlay();// 基本方法3,子类可以选择性地覆盖abstract void endPlay();
}// 具体子类:Cricket游戏
class Cricket extends Game {@Overridevoid endPlay() {System.out.println("Cricket Game Finished!");}@Overridevoid initialize() {System.out.println("Cricket Game Initialized! Start playing.");}@Overridevoid startPlay() {System.out.println("Cricket Game Started. Enjoy the game!");}
}// 具体子类:Football游戏
class Football extends Game {@Overridevoid endPlay() {System.out.println("Football Game Finished!");}@Overridevoid initialize() {System.out.println("Football Game Initialized! Start playing.");}@Overridevoid startPlay() {System.out.println("Football Game Started. Enjoy the game!");}
}// 启动类
public class TemplatePatternDemo {public static void main(String[] args) {Game game = new Cricket();game.play();System.out.println();game = new Football();game.play();}
}

在这个示例中,Game抽象类定义了游戏的算法骨架,包括初始化、开始和结束游戏三个步骤。Cricket和Football两个具体子类分别实现了这些步骤的具体行为。通过调用play()模板方法,可以执行完整的游戏流程。

示例2:咖啡制作模板
java

abstract class Coffee {// 模板方法:定义咖啡制作的流程public final void prepareCoffee() {boilWater();brewCoffee();pourInCup();if (customerWantsCondiments()) {addCondiments();}}// 抽象方法:子类需要实现具体的制作步骤protected abstract void brewCoffee();// 钩子方法:子类可以选择覆盖或使用默认实现protected void addCondiments() {System.out.println("Adding condiments");}// 钩子方法:子类可以选择覆盖,控制是否需要添加调料protected boolean customerWantsCondiments() {return true;}// 具体方法:共用的步骤private void boilWater() {System.out.println("Boiling water");}private void pourInCup() {System.out.println("Pouring into cup");}
}// 具体子类:美式咖啡
class AmericanCoffee extends Coffee {@Overrideprotected void brewCoffee() {System.out.println("Brewing American coffee");}
}// 具体子类:拿铁咖啡
class LatteCoffee extends Coffee {@Overrideprotected void brewCoffee() {System.out.println("Brewing Latte coffee");}@Overrideprotected void addCondiments() {System.out.println("Adding milk and foam");}@Overrideprotected boolean customerWantsCondiments() {return true; // 拿铁咖啡总是需要添加调料}
}// 客户端代码
public class Client {public static void main(String[] args) {Coffee coffee = new AmericanCoffee();coffee.prepareCoffee();System.out.println("\n");Coffee tea = new LatteCoffee();tea.prepareCoffee();}
}

在这个示例中,Coffee抽象类定义了咖啡制作的算法骨架,包括烧水、冲泡咖啡、倒入杯子和添加调料等步骤。AmericanCoffee和LatteCoffee两个具体子类分别实现了冲泡咖啡和添加调料的具体行为。通过调用prepareCoffee()模板方法,可以执行完整的咖啡制作流程。

四、模板模式的角色和职责

在模板模式中,各个角色和职责如下:

抽象类(Abstract Class):
职责:定义算法的骨架和步骤,包括模板方法、抽象方法和钩子方法。
实现:提供算法的主体流程,调用抽象方法和具体方法。
具体子类(Concrete Class):
职责:实现抽象类中定义的抽象方法,提供具体的行为实现。
扩展:可以覆盖钩子方法以提供额外的行为或扩展点。
钩子方法(Hook Method):
职责:提供默认行为,允许子类根据需要覆盖这些方法。
作用:作为扩展点,允许子类在不改变算法骨架的情况下,增加或修改特定步骤的行为。
客户端(Client):
职责:使用抽象类和具体子类,通过调用模板方法来执行算法流程。
作用:客户端不需要知道具体的算法实现细节,只需通过模板方法触发整个流程。

五、模板模式的使用场景

模板模式适用于以下场景:

需要定义算法骨架的场景:
在软件开发中,有些算法的核心步骤是一致的,但具体的实现细节可能因情况而异。模板方法模式在这种情况下非常有用,因为它允许定义一个算法的骨架,同时留下一些扩展点供子类实现。
一致性流程:
当存在一个多步骤的流程,且这些步骤在所有子类中都是一致的,但每个步骤的具体实现可能不同。
共享通用代码:
通过在抽象类中实现通用的步骤,可以在多个子类之间共享代码,减少重复。
图形界面应用程序:
在GUI应用程序中,事件处理流程可能相似,但具体的响应可能不同。
支付处理系统:
支付流程通常包括验证、记账和通知等步骤,但具体的实现可能因支付方式而异。
灵活性需求:
某些算法的某些步骤可能在设计初期尚未明确,或者不同的子类需要不同的实现策略。模板方法模式允许将这些步骤的实现延迟到子类中。
扩展性需求:
新的需求出现时,可以通过添加新的子类来扩展现有算法,而不需要修改现有代码。
解耦需求:
将算法的骨架与具体实现分离,降低组件之间的依赖。

关键字:视频推广一条多少钱_网页培训_怎样做好网络营销推广_阿里云免费建站

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: