-
什么情況下適合工廠模式查看全部
-
工廠模式意圖查看全部
-
工廠模式查看全部
-
工廠模式查看全部
-
設計模式是有限的使用案例,使用設計模式可提高代碼的重用性、代碼更容易被他人理解、保證代碼的可靠性。
查看全部 -
設計模式(Design Pattern)是一套被反復使用、多數人知曉的、經過分類編目的,代碼設計經驗的總結
查看全部 -
工廠模式查看全部
-
@設計模式---工廠模式的總結
一、工廠方法模式和抽象工廠模式的對比:
????1.工廠模式是一種極端情況下的抽象工廠模式,通過前面的類圖和代碼實現我們可以看到這樣一個對比,而抽象工廠模式可以看成是工廠模式的推廣,
????2.工廠模式用來創建一個產品的等級結構,而抽象工廠模式是用來創建多個產品的等級結構,
????3.工廠模式只有一個抽象產品類,而抽象工廠模式有多個抽象產品類,總之就是單一對多個產品的這種對比。二、工廠模式幫助我們實現了什么呢?
????1.系統可以在不修改具體工廠角色的情況下引進新的產品,
????2.客戶端不必關系對象如何去創建,明確了職責,對象具體的創建交給了具體的產品,product1,product2,客戶端只要告訴工廠我需要哪一,product1還是product2,它們具體是怎么創建的,怎么組合的,都交給了具體的產品product1,product2
????3.更好的理解面向對象的原則,面向接口編程,而不是面向實現編程。
那我們整體的工廠模式就是這樣一個原則。三、工廠模式適用于哪些場景呢?
????1.一個系統應當不依賴于產品類實例被創立,組成和表示的細節,就是說這個產品如何被創建,組成和表現,我們都歸結到具體的產品是如何實現上去了,與前端的client,和中端的factory都是沒有關系的,
????2.這個系統的產品至少有一個產品族,工廠方法模式就是一個產品族,它是最簡單的一個等級,
????3.同屬于同一個產品族的產品是設計成在一起使用的,這是毋庸置疑的,同屬于一個系列的產品,就是在一起的,
????4.不同的產品以一系列的接口的面貌出現,從未使系統不依賴于接口實現的細節,我們都是面向接口編程的,不是面向實現編程的,查看全部 -
@設計模式---工廠模式之 抽象工廠模式
1.創建兩個接口,如:Boy,有drawMan();Girl,有drawWoman()。public?interface?Boy?{ ??public?void?drawMan(); } public?interface?Girl?{ ??public?void?drawWoman(); }
2.創建接口的各兩個實現類,如:HNBoy、MCBoy;HNGirl、MCGirl。
public?class?HNBoy?implements?Boy?{ ??@Override ??public?void?drawMan()?{ ????System.out.println("新年系列的男孩"); ??} } public?class?MCBoy?implements?Boy?{ ??@Override ??public?void?drawMan()?{ ????System.out.println("圣誕系列的男孩"); ??} } public?class?HNGirl?implements?Girl?{ ??@Override ??public?void?drawWoman()?{ ????System.out.println("圣誕系列的女孩"); ??} } public?class?MCGirl?implements?Girl?{ ??@Override ??public?void?drawWoman()?{ ????System.out.println("圣誕系列的女孩"); ??} }
3.創建主工廠接口,如:PersonFactory。
public?interface?PersonFactory?{ ??//男孩接口 ??public?Boy?getBoy(); ??//女孩接口 ??public?Girl?getGirl(); }
4.創建次工廠類實現主工廠接口,如:HNFactory和MCFactory。
public?class?HNFactory?implements?PersonFactory?{ ??@Override ??public?Boy?getBoy()?{ ????return?new?HNBoy(); ??} ??@Override ??public?Girl?getGirl()?{ ????return?new?HNGirl(); ??} } public?class?MCFactory?implements?PersonFactory?{ ??@Override ??public?Boy?getBoy()?{ ????return?new?MCBoy(); ??} ??@Override ??public?Girl?getGirl()?{ ????return?new?MCGirl(); ??} }
5.測試用例
PersonFactory?factory?=?new?MCFactory(); Girl?girl?=?factory.getGirl(); girl.drawWoman();
查看全部 -
@設計模式---工廠模式之 工廠方法模式
1.創建一個接口,如:HairInterface,有個抽象方法draw。public?interface?HairInterface?{ ????public?void?draw(); }
2.創建實現接口的子類,如:LeftHair、RightHair、InHair。
public?class?LeftHair?implements?HairInterface?{ ????@Override ????public?void?draw()?{ ????????System.out.println("左偏分發型"); ????} }
3.創建工廠類,如:HairFactory,根據類的名稱來生產對象。
public?HairInterface?getHairByClass(String?className){ ????try?{ ????????HairInterface?hair=(HairInterface)?Class.forName(className).newInstance(); ????????return?hair; ????}?catch?(InstantiationException?e)?{ ????????e.printStackTrace(); ????}?catch?(IllegalAccessException?e)?{ ????????e.printStackTrace(); ????}?catch?(ClassNotFoundException?e)?{ ????????e.printStackTrace(); ????} ????return?null; }
4.通過映射文件,簡化類的名稱,如:type.properties。
left=onetry.DesigntonDemo.LeftHair right=onetry.DesigntonDemo.RighttHair in=onetry.DesigntonDemo.InHair
5.創建properties文件的讀取工具,如:PropertiesReader。
public?class?PropertiesReader?{ ????public?Map<String,String>?getProperties(){?? ????????Properties?props?=?new?Properties(); ????????Map<String,String>?map?=?new?HashMap<String,String>(); ????????try{ ??????????//以流的形式讀取properties文件 ??????????InputStream?in?=?getClass().getResourceAsStream("type.properties")?; ??????????props.load(in); ??????????Enumeration?en?=?props.propertyNames(); ??????????while(en.hasMoreElements()){ ??????????????String?key?=?(String)?en.nextElement(); ??????????????String?property?=?props.getProperty(key); ??????????????map.put(key,?property); ????????????} ????????}catch(Exception?e){ ??????????e.printStackTrace(); ????????} ????????return?map; ????} }
6.修改HairFactory,用PropertiesReader讀取 替換 原來的className。
public?HairInterface?getHairByClassKey(String?key){ ????try?{ ??????Map<String,String>?map?=?new?PropertiesReader().getProperties(); ??????HairInterface?hair=(HairInterface)Class.forName(map.get(key)).newInstance(); ??????return?hair; ????}?catch?(InstantiationException?e)?{ ??????e.printStackTrace(); ????}?catch?(IllegalAccessException?e)?{ ??????e.printStackTrace(); ????}?catch?(ClassNotFoundException?e)?{ ??????e.printStackTrace(); ????} ????return?null; }
7.測試用例
HairFactory?factory?=?new?HairFactory(); //HairInterface?left?=?factory.getHairByClass("onetry.DesigntonDemo.LeftHair"); HairInterface?hair?=?factory.getHairByClassKey("in"); hair.draw();
查看全部 -
@設計模式---工廠模式
一、工廠模式概念
????1.實例化對象,用工廠方法代替new操作;
????2.包括工廠方法模式和抽象工廠模式;
????3.抽象工廠模式是工廠方法模式的推廣。
二、工廠模式的意圖
????1.定義【接口】來創建對象,但讓子類來決定哪些類需要被實例化;
????2.工廠方法把實例化的工作推遲到子類中去實現。
三、適合工廠模式的情況
????1.有一組類似的對象需要創建。
????2.在編碼的時候不能預見需要創建哪種類的實例。
????3.系統需要考慮擴展性,不應依賴于產品類實例化如何被創建,組合和表達的細節。
四、項目中的現狀
????在軟件系統中經常面臨著“對象”的創建工作,由于需求的變化,這個對象可能隨之也會發生變化,但它卻擁有比較穩定的接口。為此,我們需要提供一種封裝機制來隔離出這個易變對象的變化,從而保持系統中其他依賴該對象的對象不隨著需求變化而變化。
五、基于項目現狀將代碼進行如下設計
????1.盡量松耦合,一個對象的依賴隊形的變化與本身無關;
????2.具體產品與客戶端剝離,責任分割。查看全部 -
接口創建對象,子類決定哪些被實例化
查看全部 -
查看全部
-
查看全部
-
查看全部
舉報