抽象工廠
如mac系統 mac軟件 win系統 win軟件
可以制作一個win工廠用來生產win軟件和win系統
可以制作一個mac工廠生產mac系統,mac軟件
<?php
/*
抽象工廠:提供一個創建一系列相關或相互依賴對象的接口。
注意:這里和工廠方法的區別是:一系列,而工廠方法則是一個。
那么,我們是否就可以想到在接口create里再增加創建“一系列”對象的方法呢?
*/
interface people {
function jiehun();
}
class Oman implements people{
function jiehun() {
echo '美女,我送你玫瑰和戒指!<br>';
}
}
class Iman implements people{
function jiehun() {
echo '我偷偷喜歡你<br>';
}
}
class Owomen implements people {
function jiehun() {
echo '我要穿婚紗!<br>';
}
}
class Iwomen implements people {
function jiehun() {
echo '我好害羞哦!!<br>';
}
}
interface createMan { // 注意了,這里是本質區別所在,將對象的創建抽象成一個接口。
function createOpen(); //分為 內斂的和外向的
function createIntro(); //內向
}
class FactoryMan implements createMan{
function createOpen() {
return new Oman;
}
function createIntro() {
return new Iman;
}
}
class FactoryWomen implements createMan {
function createOpen() {
return new Owomen;
}
function createIntro() {
return new Iwomen;
}
}
class Client {
// 抽象方法
function test() {
$Factory = new FactoryMan;
$man = $Factory->createOpen();
$man->jiehun();
$man = $Factory->createIntro();
$man->jiehun();
$Factory = new FactoryWomen;
$man = $Factory->createOpen();
$man->jiehun();
$man = $Factory->createIntro();
$man->jiehun();
}
}
$f = new Client;
$f->test();
簡單工廠模式:用來生產同一等級結構中的任意產品。對與增加新的產品,無能為力
工廠模式 :用來生產同一等級結構中的固定產品。(支持增加任意產品)
抽象工廠 :用來生產不同產品族的全部產品。(對于增加新的產品,無能為力;支持增加產品族)
以上三種工廠 方法在等級結構和產品族這兩個方向上的支持程度不同。所以要根據情況考慮應該使用哪種方法簡單工廠模式:
工廠類負責創建的對象較少,客戶只知道傳入工廠類的參數,對于如何創建對象不關心。
工廠方法模式:
當一個類不知道它所必須創建對象的類或一個類希望由子類來指定它所創建的對象時,當類將創建對象的職責委托給多個幫助子類中得某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化的時候,可以使用工廠方法模式。
抽象工廠模式:
一個系統不應當依賴于產品類實例何如被創建,組合和表達的細節,這對于所有形態的工廠模式都是重要的。這個系統有多于一個的產品族,而系統只消費其 中某一產品族。同屬于同一個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來。系統提供一個產品類的庫,所有的產品以同樣的接口出現,從 而使客戶端不依賴于實現。
無論是簡單工廠模式、工廠模式還是抽象工廠模式,它們本質上都是將不變的部分提取出來,將可變的部分留作接口,以達到最大程度上的復用。究竟用哪種設計模式更適合,這要根據具體的業務需求來決定
- 空白目錄
- 安裝
- linux下安裝nginx
- linux下安裝php
- 調試
- windows 安裝wamp
- 常用源
- 類型
- Boolean布爾類型
- Integer整型
- Float浮點型
- String字符串
- Array數組
- Object對象
- Resource資源類型
- NULL
- Callback/Callable類型
- 類型轉換
- 變量
- 預定義變量
- 常量
- 魔術常量(預定義常量)
- 語法
- 運算符
- 流程控制
- 條件語句
- if
- else
- else if/elseif
- switch
- 循環語句
- while
- do-while
- for
- foreach
- break
- return
- continue
- require
- include
- require_once
- include_once
- 函數
- 內置函數
- 匿名函數
- 自定義函數
- 類與對象
- 屬性
- 聲明
- public
- protected
- private
- 類常量
- 方法
- 魔術方法
- __construct()
- __destruct()
- __call()
- __callStatic()
- __get()
- __set()
- __isset()
- __unset()
- __sleep()
- __wakeup()
- __toString()
- __invoke()
- __set_state()
- __clone()
- __debugInfo()
- 方法的調用
- ->(對象運算符)
- ::(范圍解析操作符)
- 設計模式
- 依賴注入
- call_user_func
- is_callable (
- 創建型模式
- 工廠方法模式
- 抽象工廠模式
- 單例模式
- 建造者模式
- 原型模式
- 結構性模式
- 適配器模式
- 裝飾器模式
- 代理模式
- 外觀模式
- 橋接模式
- 組合模式
- 享元模式
- 行為型模式
- 策略模式
- 模板方法模式
- 觀察者模式
- 迭代子模式
- 責任鏈模式
- 命令模式
- 備忘錄模式
- 訪問者模式
- 中介者模式
- 解釋器模式
- 六大原則
- uml語言
- 反射
- 類型約束
- 調試
- lamp
- lnmp
- composer
- 工作常用
- UML圖
- 常見問題