php设计模式 Template (模板模式)_php技巧
继承关系由于自身的缺陷,被专家们扣上了“罪恶”的帽子。“使用委派关系代替继承关系”,“尽量使用接口实现而不是抽象类继承”等等专家警告,让我们这些菜鸟对继承“另眼相看”。其实,继承还是有很多自身的优点所在。只是被大家滥用的似乎缺点更加明显了。合理的利用继承关系,还是能对你的系统设计起到很好的作用的。而模板方法模式就是其中的一个使用范例。
GOF给模板方法(Template Method)模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这里的算法的结构,可以理解为你根据需求设计出来的业务流程。特定的步骤就是指那些可能在内容上存在变数的环节。
可以看出来,模板方法模式也是为了巧妙解决变化对系统带来的影响而设计的。使用模板方法使系统扩展性增强,最小化了变化对系统的影响。这一点,在下面的举例中可以很明显的看出来。
/**
* 模板模式
*
* 定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构可以定义该算法的某些特定步骤
*
*/
abstract class TemplateBase
{
public function Method1()
{
echo "abstract Method1
";
}
public function Method2()
{
echo "abstract Method2
";
}
public function Method3()
{
echo "abstract Method3
";
}
public function doSomeThing()
{
$this->Method1();
$this->Method2();
$this->Method3();
}
}
class TemplateObject extends TemplateBase
{
}
class TemplateObject1 extends TemplateBase
{
public function Method3()
{
echo "TemplateObject1 Method3
";
}
}
class TemplateObject2 extends TemplateBase
{
public function Method2()
{
echo "TemplateObject2 Method2
";
}
}
// 实例化
$objTemplate = new TemplateObject();
$objTemplate1 = new TemplateObject1();
$objTemplate2 = new TemplateObject2();
$objTemplate->doSomeThing();
$objTemplate1->doSomeThing();
$objTemplate2->doSomeThing();
AbstractClass(抽象类):定义了一到多个的抽象方法,以供具体的子类来实现它们;而且还要实现一个模板方法,来定义一个算法的骨架。该模板方法不仅调用前面的抽象方法,也可以调用其他的操作,只要能完成自身的使命。
ConcreteClass(具体类):实现父类中的抽象方法以完成算法中与特定子类相关的步骤。
根据上面对定义的分析,以及例子的说明,可以看出模板方法适用于以下情况:
一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。其实这可以说是一种好的编码习惯了。
控制子类扩展。模板方法只在特定点调用操作,这样就只允许在这些点进行扩展。比如上面runBare()方法就只在runTest前面适用setUp方法。如果你不愿子类来修改你的模板方法定义的框架,你可以采用两种方式来做:一是在API中不体现出你的模板方法;二、将你的模板方法置为final就可以了。
可以看出,使用模板方法模式可以将代码的公共行为提取出来,达到复用的目的。而且,在模板方法模式中,是由父类的模板方法来控制子类中的具体实现。这样你在实现子类的时候,根本不需要对业务流程有太多的了解。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

透過Golang的Template套件實現資料視覺化隨著大數據時代的到來,資料視覺化成為了資訊處理和分析的重要手段之一。數據視覺化能夠以簡潔直觀的方式展現數據,幫助人們更好地理解和分析數據。在Golang中,我們可以使用Template套件來實現資料視覺化功能。本文將介紹如何利用Golang的Template套件實現資料視覺化,並提供程式碼範例。 Golang的Tem

Golang和Template套件:創造個人化的使用者介面在現代的軟體開發中,使用者介面往往是使用者與軟體互動的最直接的途徑。為了提供一個好用、美觀的使用者介面,開發者需要靈活的工具來建立和自訂使用者介面。而在Golang中,開發者可以使用Template套件來實現這一目標。本文將介紹Golang和Template套件的基本用法,並透過程式碼範例展示如何建立個人化的使用者界

Go語言是一種越來越受歡迎的程式語言,它的語法簡潔,效能高效,易於開發。 Go語言中提供了強大的模板引擎-"text/template",但是在使用時,有些人可能會遇到"undefined:template.Must"的錯誤,以下是解決該錯誤的方法。導入正確的套件在使用"text/template"模板引擎時,需要導入"text/templat

PHP是一種廣泛使用且非常流行的程式語言。在當今的Web應用程式中,PHP是非常重要的一部分。在開發PHP應用程式的過程中,設計模式起著至關重要的作用。設計模式是解決問題的一種模板,在不同的環境中可重複使用,幫助我們寫出更好的程式碼,使程式碼更加可靠、可維護、可擴展。在本文中,我們將探討一些PHP中常用的設計模式及其實作方法。單例模式單例模式是一種創建模式,它允許

Golang的Template套件:開發高效能的網頁應用程式引言:在網路開發中,模板引擎是一個非常重要的元件。它允許開發者將動態的資料與靜態的HTML模板結合,以產生最終的網頁內容。 Golang的Template套件提供了一種高效且強大的方式來處理模板。本文將介紹Golang的Template套件的基本用法,並透過一些程式碼範例展示如何使用它來開發高效能的Web應

Golang和Template套件:建立強大的前端開發工具箱在當今的軟體開發中,前端開發在整個專案中變得越來越重要。為了提供一個優雅且可靠的前端開發解決方案,我們可以使用Golang語言和其內建的Template套件。本文將介紹如何使用Golang和Template套件來建立一個強大的前端開發工具箱。一、Golang:高效且易於使用的程式語言Golang是一種現代

使用Golang的Template套件建立現代化的網站近年來,隨著網路的快速發展,越來越多的網站需要提供個人化的內容和介面。同時,Golang(又稱Go語言)以其高效能和強大的並發能力成為了開發網路應用的熱門選擇。在Golang的標準函式庫中,提供了一套強大且靈活的模板引擎,即Template套件。本文將介紹如何使用Golang的Template套件建構現代化

Golang與Template套件:快速開發便利的前端介面在現代Web開發中,前端介面的開發是重要且不可或缺的環節。前端介面的設計不僅需要美觀,還需要具備良好的使用者體驗。然而,傳統的前端開發過程往往需要耗費大量的時間和精力。幸運的是,Golang提供了Template包,旨在幫助開發人員快速建立便利的前端介面。 Golang是一種高效率、簡潔、並發、靜態型別的
