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