一、
製作乙個抽象產品:螺絲
製作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常用標記 單標記...