設計模式和抽象類 方法

2022-08-17 09:00:28 字數 1491 閱讀 3313

所謂設計模式,就是一些解決問題的「常規做法」,是一種認為較好的經驗總結。面對不同的問題,可能會有不同的解決辦法,此時就可以稱為不同的設計模式。

在實際應用中,我們總是需要去例項化很多很多的類——以得到物件。

則:我們可以設計出乙個「工廠」(其實就是類),該工廠的作用(任務)就是為人們「生產」各種物件。這種工廠通常只要指定類名,就可以據此獲取乙個該類的物件。

應用中的某種需求:

對於某些類,在使用它的時候,從頭到尾(程式執行的開始到結束),都只需要乙個物件,就可以完成所有任務。

單例:某個類,只允許其「建立」出乙個物件,即使去進行多次建立,也只能得到乙個物件。

$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 編寫乙個抽象父類...