所謂設計模式,就是一些解決問題的「常規做法」,是一種認為較好的經驗總結。面對不同的問題,可能會有不同的解決辦法,此時就可以稱為不同的設計模式。
在實際應用中,我們總是需要去例項化很多很多的類——以得到物件。
則:我們可以設計出乙個「工廠」(其實就是類),該工廠的作用(任務)就是為人們「生產」各種物件。這種工廠通常只要指定類名,就可以據此獲取乙個該類的物件。
應用中的某種需求:
對於某些類,在使用它的時候,從頭到尾(程式執行的開始到結束),都只需要乙個物件,就可以完成所有任務。
單例:某個類,只允許其「建立」出乙個物件,即使去進行多次建立,也只能得到乙個物件。
$obj1 = new a();
$obj2 = $obj1; //此時還是
1個物件,
$obj2
只是最終指向了跟
$obj1
同樣的物件
$obj3 = new a(); //這時候才有了第二個物件。
但其實在php語言中,乙個物件還可以使用
clone
運算子進行轉殖,則就也會「生成」新物件。
因此,還需要在類中使用私有化措施來禁止轉殖,最終,單例模式的實現如下:
在正常定義類的前面,加上關鍵字:abstract,那就構成抽象類。
abstract class 類名
可見,抽象類有什麼用?
抽象類可以用來規範一些類的共同特性,但又不能去對其進行例項化。
怎麼規範:繼承它。
也就是說,抽象類的使命是專門做「父類」:子類就繼承了它的特性,這就是「規範作用」
抽象方法是乙個沒有方法體(也不含大括號)的方法定義「頭」而已。前面需要加上abstract。
比如:abstract function f1($x1, $y, $m) ; //注意,後面一定有分號。
抽象方法有什麼用?
其實跟抽象類一樣,配合抽象類,來實現對下級類的「行為規範」。即相當於要求下級類去完成該功能(動作),但自己是不做的。
(1)如果乙個方法定義為抽象方法,則其所在的類必須定義為抽象類。
(2)但,乙個抽象類中,可以沒有抽象方法——但通常意義不大。
(3)子類繼承自乙個抽象類,則子類必須實現父類中的所有抽象方法,除非子類也繼續作為抽象類
(4)子類實現抽象父類的方法時,訪問控制修飾符的範圍不能降低,且方法的引數也須一致——其實這就是重寫,所以要滿足重寫的要求。
抽象類 模板方法設計模式
一 抽象類的應用 1 概念 當多個類存在相同的功能時,我們就可以把這些功能提出出來,單獨封裝在乙個類裡面,只提出方法名,不提出方法實體就是功能的主體部分不同,我們進行向上抽取,只抽取功能的定義部分,不抽取功能的主體。2 abstract,抽象的,可以修飾類和方法,被修飾的方法只能有方法名,沒有方法實...
抽象類和模板方法模式
抽象方法和抽象類 抽象類 用abstract修飾符修飾的類,如 public abstract class generalservice 抽象方法 用abstract修飾符修飾的方法,抽象方法不能有方法體,如 public abstract void service 抽象類和抽象方法的規則如下 必須...
抽象類的模板方法設計模式
一 前言 抽象類體現的就是一種模板模式的設計,抽象類作為多個子類的通用模板,子類在抽象類的基礎上進行擴充套件 改造,但子類總體上會保留抽象類的行為方式。二 模板方法能解決的問題 1 當功能內部一部分實現是確定的,一部分實現是不確定的。這時可以把不確定的部分暴露出去,讓子類去實現。2 編寫乙個抽象父類...