第二課 工廠模式和原型模式

2021-10-06 15:31:53 字數 2794 閱讀 8463

一、

製作乙個抽象產品:螺絲

製作2個具體產品:8mm螺絲 和 6mm螺絲

使用簡單工廠來實現這個場景,並且讓客戶端通過簡單工廠來獲取具體產品。

然後擴充套件乙個7mm螺絲,你會發現這要修改簡單工廠的**。進而違反了開閉原則。

所以在使用工廠方法來重構一遍**。保證7mm螺絲可以被順利地擴充套件進來

簡單工廠

/**

* @author 鄭金衝

* @create 2020-05-29 20:29

* @description 簡單工廠 作業

* @telephone 17805202282

* @email [email protected]

*/public class client

}//產品基類: 螺絲

inte***ce screw

//具體產品類: 8公釐螺絲

class eightmillimeterscrew implements screw

}//具體產品類: 6公釐螺絲

class sixmillimeterscrew implements screw

}//工廠

class factory

return screw;

}}

工廠方法

/**

* @author 鄭金衝

* @create 2020-05-29 20:29

* @description 簡單工廠 作業

* @telephone 17805202282

* @email [email protected]

*/public class client2

}//產品基類: 螺絲

inte***ce screw

//具體產品類: 8公釐螺絲

class eightmillimeterscrew implements screw

}//具體產品類: 7公釐螺絲

class sevenmillimeterscrew implements screw

}//具體產品類: 6公釐螺絲

class sixmillimeterscrew implements screw

}//螺絲工廠基類

inte***ce screwfactory

//8公釐螺絲工廠

class eightmillimeterscrewfactory implements screwfactory

}//7公釐螺絲工廠

class sevenmillimeterscrewfactory implements screwfactory

}//6公釐螺絲工廠

class sixmillimeterscrewfactory implements screwfactory

}

二、

總結工廠以及原型設計模式,談談你們開發過程中使用使用各種框架,

見識各種原始碼,在哪些地方體現了工廠模式,原型模式。

答:工廠模式:

工廠模式實際應用中可分為簡單工廠,工廠方法,抽象工廠三類

簡單工廠:

優點:* 1:將具體產品的型別 從客戶端端**中解耦出來

* 2:服務端**修改了具體的產品類名 客戶端不知道,這便符合我們的 面向介面程式設計 的思想

* 這裡的介面不單包括 inte***ce 只要是下層給上層暴露出來的方法、類 都可認為是面向介面程式設計裡的介面形式

缺點:* 1:type 與具體產品對映關係

* 2:如果 具體產品非常大,簡單工廠的**會變得非常臃腫

* 3.擴充套件具體產品,勢必會修改簡單工廠的**,違反了 開閉原則

* 4.始終丟失原始類資料

工廠方法:

優點:* 1.具有簡單工廠的優點 符合開閉原則

* 2.擴充套件了新產品,不需要修改作者原來的**,新加乙個工廠而已

缺點:* 1.高耦合了,只知道具體工廠類名 才能修改相關具體產品

* 2.每增加乙個產品等級 就要增加乙個生產產品的工廠以及具體的產品類 和產品生產工廠

這樣會 造成類的**式增長增加了系統複雜度 增加了開銷

* 3.乙個具體工廠只能建立乙個具體產品

* 4.設計太過複雜

** 規約:約定大於配置

* 工廠的名字 視為介面。作為作者,有責任和義務保證工廠的名字是趨向穩定的

抽象工廠:

優點:具備簡單工廠和工廠方法的優點

* 1.抽象工廠減少了工廠類,無論有多少的產品等級,工廠就一套

* 疑問: 為啥具體產品要這樣搭配?

* 抽象工廠中,可以生產多個產品,這些產品必須要有邏輯關係

* 產品簇 ,產品等級

缺點:* 1.當產品等級發生變化,需要引起所有之前的工廠**的修改違反了 開閉原則

結論:* 產品等級比較固定,考慮抽象工廠

* 產品等級經常變化 不建議抽象工廠

* 產品等級少 建議工廠方法

spring bean的建立就是乙個典型的工廠模式,我們無需建立bean,spring 的beanfactory幫我們做到了,

我們只要在需要的地方通過依賴注入來獲取需要的例項。

原型模式:

1.類初始化需要消化非常多的資源,這個資源包括資料、硬體資源等,通過原型拷貝避免這些消耗。

2.通過new乙個物件需要非常繁瑣的資料準備或訪問許可權,可以使用原型模式。

3.乙個物件需要提供給其他物件訪問,而且各個呼叫者可能需要修改其值,可以考慮使用原型模式拷貝多個物件供呼叫者使                  用,  即保護性拷貝

第二課 型別和值

lua是一種動態型別語言。沒有型別定義的語法。每個值都攜帶了它自身的型別資訊。8種基礎型別 nil 空 boolean 布林 number 數字 string 字串 userdata 自定義型別 function 函式 thread 執行緒 table 表 函式type可 根據乙個值返回其型別名稱。...

第二課 安裝PHP

為什麼要安裝php?php是伺服器端解析程式,一般執行在網路伺服器上。而編寫php語言的程式我們一般是在自己的個人電腦上完成,然後拿到伺服器上除錯。所以,學習php首先要讓我們的個人電腦模擬伺服器執行環境,讓php能象在伺服器上一樣在我們的個人電腦上執行。這就是為什麼要安裝配置php的原因。安裝配置...

csdn之旅 第二課

1.html標題的標籤 1 注意 只能到,在往後就沒有作用了。2 標籤特點 可以區別其他文字,比如可以加粗 效果圖如 笑對生活!笑對生活!笑對生活!笑對生活!改變字型大小 可以自動換行 2.html段落標記 用元素 注意 標籤和標籤之間的關係 可以巢狀使用 但不可以交叉 3.html常用標記 單標記...