-
工廠模式的概念:實例化對象,用工廠模式代替new對象查看全部
-
工廠模式的概念查看全部
-
工廠模式的概念查看全部
-
工廠模式和抽象工廠模式的對比查看全部
-
工廠模式適用場合查看全部
-
工廠模式的意圖查看全部
-
工廠模式查看全部
-
模式的秘密---工廠模式——總結 II 一、工廠方法和抽象工廠方法的對比: 1)工廠模式是一種極端情況下的抽象工廠模式,而抽象工廠模式可以看成是工廠模式的推廣; 2)工廠模式用來創建一個產品的等級結構,而抽象工廠模式是用來創建多個產品的等級結構; 3)工廠模式只有一個抽象產品類,而抽象工廠模式有多個抽象產品類,總之就是單一對多個產品的這種對比。 二、工廠模式幫助我們實現了什么呢: 1)系統可以在不修改具體工廠角色的情況下引進新的產品; 2)客戶端不必關系對象如何去創建,明確了職責,對象具體的創建交給了具體的產品,product1,product2,客戶端只要告訴工廠我需要哪一,product1還是product2,它們具體是怎么創建的,怎么組合的,都交給了具體的產品product1,product2; 3)更好的理解面向對象的原則,面向接口編程,而不是面向實現編程。那我們整體的工廠模式就是這樣一個原則。 三、工廠模式適用于哪些場景呢: 1)一個系統應當不依賴于產品類實例被創立,組成和表示的細節,就是說這個產品如何被創建,組成和表現,我們都歸結到具體的產品是如何實現上去了,與前端的client,和中端的factory都是沒有關系的; 2)這個系統的產品至少有一個產品族,工廠方法模式就是一個產品族,它是最簡單的一個等級; 3)同屬于同一個產品族的產品是設計成在一起使用的,這是毋庸置疑的,同屬于一個系列的產品,就是在一起的; 4)不同的產品以一系列的接口的面貌出現,從未使系統不依賴于接口實現的細節,我們都是面向接口編程的,不是面向實現編程的。 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
模式的秘密---工廠模式——總結 I 1、接下來看spring beanfactory,這是非常有名的工具,我們知道spring容器是一個控制反轉,主要作用是生成bean,管理bean,從工廠模式來看,spring beanfactory就是生產bean,然后提供給客戶端。 2、來看一下bean實例化的過程:調用bena的默認構造方式生成bean的實例,暫稱為instance1,如果在bean配置文件中注入了bean的屬性,則在instance1基礎上進行屬性注入形成instance2,這種注入是覆蓋性的,如果bean實現了InitializingBean接口,則調用afterPropertiesSet()方法,來改變或者操作instance2,得到instance3。其中:InitializingBean是spring提供的一個初始化bean的類,如果實現了這個類,則必須實現afterPropertiesSet()方法,接下來,如果bean的配置文件中指定了inti-method="init"屬性,又會調用一個初始化方法,則在instance3的基礎上又會進行一些改變,編程instance4. 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
模式的秘密---工廠模式——抽象工廠模式應用 0、PersonFactory.java /** * 人物的實現接口 * @author Administrator */ public interface PersonFactory { //男孩接口 public Boy getBoy(); //女孩接口 public Girl getGirl(); } 1、Boy.java /** * 男孩子 * @author Administrator */ public interface Boy { public void drawMan(); } 2、Girl.java /** * 女孩子 * @author Administrator */ public interface Girl { public void drawWomen(); } 3、HNFactory.java /** * 新年系列加工廠 * @author Administrator */ public class HNFactory implements PersonFactory { @Override public Boy getBoy() { return new HNBoy(); } @Override public Girl getGirl() { return new HNGirl(); } } 4、HNBoy.java /** * 新年系列的男孩子 * @author Administrator */ public class HNBoy implements Boy { @Override public void drawMan() { System.out.println("新年系列的男孩子"); } } 5、HNGirl.java /** * 新年系列的女孩子 * @author Administrator */ public class HNGirl implements Girl { @Override public void drawWomen() { System.out.println("新年系列的女孩子"); } } Ps:圣誕同理新年的3/4/5。查看全部
-
模式的秘密---工廠模式——工廠模式應用 III 3、HairInterface.java /** * 發型接口 * @author Administrator */ public interface HairInterface { /** * 畫圖 */ public void draw(); } 4、LeftHair.java(Right、In同理可得) /** * 左偏分發型 * @author Administrator */ public class LeftHair implements HairInterface { @Override public void draw() { System.out.println("左偏分發型"); } } 5、SunnyTest.java public class SunnyTest { public static void main(String[] args){ // HairInterface left = new LeftHair(); // left.draw(); HairFactory factory = new HairFactory(); // HairInterface right = factory.getHair("right"); // right.draw(); // HairInterface left = factory.getHairByClass("com.sunny.project.LeftHair"); // left.draw(); // HairInterface hair = factory.getHairByClassKey("in"); // hair.draw(); } } Ps【小技巧】:"left".equals(key),字符串放在左邊可以避免當key為空時的異常。 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
模式的秘密---工廠模式——工廠模式應用 II /** * 原因:Class.forName(className) 每次要寫那么長的路徑類名太麻煩,利用配置文件來簡化 * 根據類的名稱來生產對象 * @param className * @return */ 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; } } 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
模式的秘密---工廠模式——工廠模式應用 I 1、type.properties: left=com.sunny.project.LeftHair right=com.sunny.project.RightHair in=com.sunny.project.InHair 2、HairFactory .java /** * 發型工廠 * @author Administrator */ public class HairFactory { /** * 根據類型來創建對象 * @param key * @return */ public HairInterface getHair(String key){ if("left".equals(key)){ return new LeftHair(); }else if("right".equals(key)){ return new RightHair(); } return null; } /** * 原因:以上每次else if new 下太麻煩。 * 根據類的名稱來生產對象 * @param className * @return */ 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; } ... 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
模式的秘密---工廠模式——工廠模式概述 II 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
模式的秘密---工廠模式——工廠模式概述 I 一、工程模式概念: 1、實例化對象,用工廠方法代替new操作; 2、包括工廠方法模式和抽象工廠模式; 3、抽象工廠模式是工廠模式的推廣。 二、工廠模式的意圖: 1、定義一個【接口】來創建對象,但是讓子類來決定哪些類需要被實例化; 2、工廠方法把實例化的工作推遲到子類中去實現。 三、適合工廠模式的情況: 1、有一組類似的對象需要創建。 2、在編碼的時候不能預見需要創建哪種類的實例。 3、系統需要考慮擴展性,不應依賴于產品類實例化如何被創建,組合和表達的細節。 四、項目中的現狀: 在軟件系統中經常面臨著“對象”的創建工作,由于需求的變化,這個對象可能隨之也會發生變化,但它卻擁有比較穩定的接口。為此,我們需要提供一種封裝機制來隔離出這個易變對象的變化,從而保持系統中其他依賴該對象的對象不隨著需求變化而變化。 五、基于項目現狀將代碼進行如下設計: 1、盡量松耦合,一個對象的依賴隊形的變化與本身無關; 2、具體產品與客戶端剝離,責任分割。 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
舉報
0/150
提交
取消