设计模式之模板设计模式–设计框架骨架使得开发更专注业务
模板设计模式
是一种根据面向对象的继承,多态特性出现的模式,模板父类定义了一个框架主逻辑,子类重写对应子类的部分子逻辑来补充主逻辑。
定义操作中的算法骨架,将一些步骤延迟到子类。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
为什么要使用模板方法模式
这个模式应该是代码中使用最多的几个之一了。基本上你使用了继承并且子类多态改几个步骤就完事了,不仅开发更加方便,而且使用也很多。
比如很多扩展包,你可以自定义一些功能,就是继承扩展包中的一个类然后重写里面的部分逻辑,这就是模板方法模式。你继承的父类可以看作是一个模板类。
这个设计模式的实现很容易。
php实现模板方法模式
/**
* 模板方法模式
* 模板类
*/
abstract class templete{
function run() {
//调用自己的其他方法完成逻辑,其他方法需要子类继承重写
$this->step1();
$this->step2();
}
abstract function step1();
abstract function step2();
}
上面的是一个模板父类,现在可以有多个子类继承他来完成子类自己的逻辑。
/**
* 模板方法模式
* 具体产品类继承模板类
*/
class product extends templete{
function step1() {
//重写完成子类自己的逻辑,主逻辑父类已经写好
}
function step2() {
}
}
很多组件中都使用了这个设计模式,我觉得一些生命周期的钩子,也可以使用这个设计模式来实现。比如我在我的laravel-一键生成CURD神器这个扩展包中就使用了这个设计模式,让你的子类方便扩展自己的代码,自定义自己的需求。
比如动态获取子类需要操作的model
,使用了这个设计模式,部分代码如下
function getModel();
你的子类只需要重写这个方法告诉我要操作的model
就可以直接实现增删改查,毕竟增删改查的逻辑都差不多,那么这样就可以省下很多时间,提高开发效率。
代码放在了我的github上面。