不一样的模板模式(设计模式十一)
2023-09-14 08:59:24 时间
前言
这个补一章,因为当时觉得很简单所以就跳过了,所以补齐十一。
什么是模板模式呢?这是一个晚绑定非常好的体现。把定义抄一下哈:一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
这节主要介绍一下晚绑定是啥,增强理解,这个模式很简单的。
正文
就是有这样一个场景:
public abstract class Library{
abstract void part1();
bool part2()
{
return xx;//xx 表示true 或者false
}
void part3()
{
}
}
public class Appliaction:Library{
override void part1(){
//具体实现
}
}
然后呢,main中这样调用的。
Appliaction appliaction=new Appliaction();
appliaction.part1();
//一些操作
if(appliaction.part2())
{
appliaction.part3();
}
如果:
appliaction.part1();
//一些操作
if(appliaction.part2())
{
appliaction.part3();
}
是稳定的,那么可以提取到Appliaction中,那么可以这样:
public abstract class Application{
override void part1()
{
}
void run()
{
part1();
//一些操作
if(part2())
{
part3();
}
}
}
这样做就好了点,但是最好能放在Library中。
因为application 调用的是library 中的函数,因为application 比library 晚实现,那么调用早实现的,就是晚绑定,反过来就是早绑定了。
如果这样的话,会跟好一点:
public abstract class Library{
abstract void part1();
bool part2()
{
return xx;//xx 表示true 或者false
}
void part3()
{
}
void run()
{
part1();
//一些操作
if(part2())
{
part3();
}
}
}
那么问题来了,为什么晚绑定比早绑定好?
因为如果把具体实现放在子类中,可以不改变某种算法即可定义该算法的某种步骤,也就是说run 方法放在了一个稳定的类中封装起来了。
可能这样在library 和application中不好理解,那么在main 和application 那个变化中就很好理解了,如果把步骤放在main中,做同样的操作,是不是又要写一遍。
然后放在application中,如果run是稳定的,那么是不是library 的继承类是不是又要写一遍?这样复用性,可读性,还有维护性都降低了很多。
相关文章
- Cloud Studio高阶玩家:强大的YAML模板
- 漂亮的个人博客模板
- 模板的基本使用
- 软件测试报告如何写好_软件功能测试报告模板
- JavaScript刷LeetCode模板技巧篇(一)
- 本站同款宁静致远(Quietlee)自媒体博客主题模板,夜间模式及强大的SEO效果-ZBlog主题
- 真香系列:IPSec策略模板模式、模板模式、策略模式的区别
- 模板方法模式(TemplateMethod)
- 给女朋友讲设计模式 之 模板方法模式
- 图解设计模式:Teamplate Method 模板方法模式 由子类实现具体内容的模式
- vue.js客服系统实时聊天项目开发(七)ES6模板字符串进行字符串变量内嵌拼接
- 「.vue文件的编译」4. 模板编译之AST的优化
- c++基础篇之C++ 模板
- asp模板引擎终结者(WEB开发之ASP模式)
- Ajax通用模板实现代码