• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

使用场景

一般这种设计模式在最初写代码的时候基本不会提前想到,在后期不断重构的过程中细化。简单来说,当你发现你写了两个或者更多几乎一样的类,但是有些方法实现方式不一样的时候,你就要停下来想一想。如果您发现在使用这些类的地方调用方法的顺序是相同的,请不要犹豫使用模板方法模式重构。

第一步:先定义一个模板类LivePlay,如下面的代码片段所示,其中seeLivePlay()就是所谓的模板方法。为了不被子类覆盖,它被设置为final,这定义了一个算法框架。的login()是一个实体方法,里面有一般的逻辑,所有的子类都一样。修改了四个抽象方法,需要子类根据自己的实际算法来实现,而pushVideoStream()方法有一个默认的空实现,一般称为hook方法,设计为被一些需要的子类覆盖。比如腾讯Live SDK提供旁路推送功能,而金山的没有,所以腾讯Live类可以选择overwrite作为hook方法,提供自己的实现。

包装templae

/**

* @作者wmd

* @日期2022年5月2日

*模板方法

*/

公共抽象类LivePlay {

//模板方法

公共最终void seelivePlay() {

//定义流程

log in();

openRoom();

startAudioAndVideoStream();

pushVideoStream();

stopAudioAndVideoStream();

close room();

}

私有无效登录(){

System.out.println('用户登录');

}

受保护的抽象void close room();

受保护的抽象void stopAudioAndVideoStream();

受保护的抽象void startAudioAndVideoStream();

受保护的抽象void openRoom();

/* hook方法,它可以被所需的子类覆盖*/

//绕过推送流,可以通过视频链接在浏览器中查看视频

public void pushVideoStream() {

}

}

//定义具体的实现类

类腾讯LivePlay扩展LivePlay {

@覆盖

受保护的无效封闭空间(){

System.out.println('腾讯收房');

}

@覆盖

受保护的void stopAudioAndVideoStream() {

System.out.println('腾讯关闭音视频流');

}

@覆盖

受保护的void startAudioAndVideoStream(){

System.out.println('腾讯开放音视频流');

}

@覆盖

受保护的void openRoom() {

System.out.println('腾讯开房');

}

//重写hook方法以提供旁路推送功能。

@覆盖

public void pushVideoStream() {

super . pushvideostream();

System.out.println('腾讯执行旁路推送');

}

}

//金山直播课

金山LivePlay类扩展LivePlay {

@覆盖

public void openRoom() {

System.out.println('金山开房');

}

@覆盖

public void startAudioAndVideoStream(){

System.out.println('金山打开音视频流');

}

@覆盖

public void stopAudioAndVideoStream(){

System.out.println('金山关闭音视频流');

}

@覆盖

公共空密室(){

System.out.println('金山关房');

}

}

类TemplateMethodTest{

公共静态void main(String[] args) {

live play tlive play=new Tencent live play();

tlive play . seeliveplay();

live play JlivePlay=new JinShanLivePlay();

jliveplay . seeliveplay();

}

}

优点

主要是“开闭原则”提高了代码的复用性,很符合。

缺点

设计模式的通病:类的数量增加。

控制反转:一般来说,程序的执行流程就是子类调用父类的方法。模板方法模式使程序流成为父类调用一个子类方法,程序难以理解和跟踪。摘要

模板模式是好莱坞原则的一个很好的例子:不要打电话给我们,我们会打电话给你。

总结

模板模式是好莱坞原则的一个很好的例子:不要打电话给我们,我们会打电话给你。

Link to comment
Share on other sites