数码资讯
PHP设计模式模板(模板模式)
由于其自身的缺陷,继承是由邪恶的帽子专家抓住。而不是继承的代表,尽可能的使用接口而不是抽象类继承等专家警告,让我们这些菜鸟特别尊重继承。事实上,有许多优势,继承更明显。它似乎被虐待的人,继承关系的合理使用,或者你可以在系统的设计中起到很好的作用,模板方法模式是一个使用的例子。 GOF定义一个操作中的
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
由于其自身的缺陷,继承是由邪恶的帽子专家抓住。而不是继承的代表,尽可能的使用接口而不是抽象类继承等专家警告,让我们这些菜鸟特别尊重继承。事实上,有许多优势,继承更明显。它似乎被虐待的人,继承关系的合理使用,或者你可以在系统的设计中起到很好的作用,模板方法模式是一个使用的例子。
GOF定义一个操作中的算法的模板方法的骨架(模板方法)模式,和延迟的一些子类的步骤。子类可以重新定义算法中的某些步骤不改变结构的一种算法。该算法的结构,在这里可以理解为你按设计的要求业务流程。具体步骤是指可能存在的那些链接的内容。
可以看出,模板方法模式也是为了巧妙地解决变化对系统的影响而设计的,模板方法的使用使得系统的可扩展性得到增强,并减少了系统变化的影响,这一点在下面的例子中可以清楚地看到。
复制代码代码如下所示:
< PHP
*模板模式
*
*定义操作中的算法骨架,并将一些步骤推迟到子类,这样子类不能改变算法的结构,并且可以定义算法的某些特定步骤。
*
* /
抽象类templatebase
{
公共函数方法()
{
回声抽象方法;
}
公共函数法()
{
回声抽象法;
}
公共函数方法()
{
回声抽象方法;
}
公共函数doSomething()
{
美元->方法();
美元->法();
美元->方法();
}
}
类templateobject延伸templatebase
{
}
类templateobject1延伸templatebase
{
公共函数方法()
{
回声templateobject1方法;
}
}
类templateobject2延伸templatebase
{
公共函数法()
{
回声templateobject2法;
}
}
实例化
objtemplate美元=新templateobject();
objtemplate1美元=新templateobject1();
objtemplate2美元=新templateobject2();
objtemplate美元-> doSomething();
objtemplate1美元-> doSomething();
objtemplate2美元-> doSomething();
AbstractClass(抽象类):定义一个或多个具体的子类来实现抽象方法,并实现了定义一个算法的骨架模板法,模板法不仅需要以前的抽象方法,也可以调用其他的操作,只要能完成自己的使命。
ConcreteClass(类):实现父类中的抽象方法来完成一个特定的子类相关的算法步骤。
通过对上面定义的分析和实例的说明,可以看出模板法适用于以下情况:
算法的不变部分立即实现,变量行为留给子类。
每个子类中的公共行为应该被提取并集中在一个共同的父类中,以避免代码重复。事实上,这可以说是一个良好的编码习惯。
控制子类扩展。模板方法只被调用的特殊点,这样就只允许在这些点延伸。例如,上述runbare()方法仅适用于安装方法之前运行测试。如果你不想让子类修改你的模板方法定义的框架,你可以在两种方式做到:第一,不体现在API模板法;二,设置你的模板方法,最终。
正如你所看到的,使用模板方法模式可以提取的代码实现复用的目的的公共行为,此外,在模板方法模式中,父类的模板方法在子类中的具体实施控制。所以当你实现一个类,你不必在所有的业务流程了解多少。
GOF定义一个操作中的算法的模板方法的骨架(模板方法)模式,和延迟的一些子类的步骤。子类可以重新定义算法中的某些步骤不改变结构的一种算法。该算法的结构,在这里可以理解为你按设计的要求业务流程。具体步骤是指可能存在的那些链接的内容。
可以看出,模板方法模式也是为了巧妙地解决变化对系统的影响而设计的,模板方法的使用使得系统的可扩展性得到增强,并减少了系统变化的影响,这一点在下面的例子中可以清楚地看到。
复制代码代码如下所示:
< PHP
*模板模式
*
*定义操作中的算法骨架,并将一些步骤推迟到子类,这样子类不能改变算法的结构,并且可以定义算法的某些特定步骤。
*
* /
抽象类templatebase
{
公共函数方法()
{
回声抽象方法;
}
公共函数法()
{
回声抽象法;
}
公共函数方法()
{
回声抽象方法;
}
公共函数doSomething()
{
美元->方法();
美元->法();
美元->方法();
}
}
类templateobject延伸templatebase
{
}
类templateobject1延伸templatebase
{
公共函数方法()
{
回声templateobject1方法;
}
}
类templateobject2延伸templatebase
{
公共函数法()
{
回声templateobject2法;
}
}
实例化
objtemplate美元=新templateobject();
objtemplate1美元=新templateobject1();
objtemplate2美元=新templateobject2();
objtemplate美元-> doSomething();
objtemplate1美元-> doSomething();
objtemplate2美元-> doSomething();
AbstractClass(抽象类):定义一个或多个具体的子类来实现抽象方法,并实现了定义一个算法的骨架模板法,模板法不仅需要以前的抽象方法,也可以调用其他的操作,只要能完成自己的使命。
ConcreteClass(类):实现父类中的抽象方法来完成一个特定的子类相关的算法步骤。
通过对上面定义的分析和实例的说明,可以看出模板法适用于以下情况:
算法的不变部分立即实现,变量行为留给子类。
每个子类中的公共行为应该被提取并集中在一个共同的父类中,以避免代码重复。事实上,这可以说是一个良好的编码习惯。
控制子类扩展。模板方法只被调用的特殊点,这样就只允许在这些点延伸。例如,上述runbare()方法仅适用于安装方法之前运行测试。如果你不想让子类修改你的模板方法定义的框架,你可以在两种方式做到:第一,不体现在API模板法;二,设置你的模板方法,最终。
正如你所看到的,使用模板方法模式可以提取的代码实现复用的目的的公共行为,此外,在模板方法模式中,父类的模板方法在子类中的具体实施控制。所以当你实现一个类,你不必在所有的业务流程了解多少。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。