国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java設(shè)計(jì)模式之簡單工廠模式簡述

2019-11-26 13:59:01
字體:
供稿:網(wǎng)友

簡單工廠模式的概念

就是建立一個(gè)工廠類,對(duì)實(shí)現(xiàn)了同一接口的一些類進(jìn)行實(shí)例的創(chuàng)建。簡單工廠模式的實(shí)質(zhì)是由一個(gè)工廠類根據(jù)傳入的參數(shù),動(dòng)態(tài)決定應(yīng)該創(chuàng)建哪一個(gè)產(chǎn)品類(這些產(chǎn)品類繼承自一個(gè)父類或接口)的實(shí)例。 

簡單工廠模式的UML圖 

簡單工廠模式代碼
學(xué)習(xí)簡單工廠模式的時(shí)候我用的是一個(gè)與人類有相關(guān)的例子。人類在世界分為男人和女人,首先定義一個(gè)Human產(chǎn)品的抽象接口 

/** * This is factory patter package */package com.roc.factory;/** * 產(chǎn)品的抽象接口 人類 * @author liaowp * */public interface Human {  public void say();}

然后定義男人和女人,同樣都有說話的方法。 

/** * This is factory patter package */package com.roc.factory;/** * man 男人 * @author liaowp * */public class Man implements Human { /* say method * @see com.roc.factory.Human#say() */ @Override public void say() { System.out.println("男人"); }}
/** * This is factory patter package */package com.roc.factory;/**女人 * @author liaowp * */public class Woman implements Human { /* say method * @see com.roc.factory.Human#say() */ @Override public void say() { System.out.println("女人"); }}

最后寫一個(gè)工廠類,用來創(chuàng)造男人和女人。第一種方式是使用邏輯判斷的方式實(shí)現(xiàn)的。 

package com.roc.factory;/** * 簡單工廠 * @author liaowp * */public class SampleFactory { public static Human makeHuman(String type){ if(type.equals("man")){  Human man = new Man();  return man; }else if(type.equals("womman")){  Human woman = new Woman();  return woman; }else{  System.out.println("生產(chǎn)不出來");  return null; }   }}

第二方式是使用java的放射實(shí)現(xiàn)的,我覺得這一類的實(shí)現(xiàn)方式比較好。 

package com.roc.factory;/** * 簡單工廠放射實(shí)現(xiàn) * @author liaowp * */public class SampleFactory1 { public static Human makeHuman(Class c){ Human human = null; try {  human = (Human) Class.forName(c.getName()).newInstance(); } catch (InstantiationException e) {  // TODO Auto-generated catch block  System.out.println("不支持抽象類或接口");  e.printStackTrace(); } catch (IllegalAccessException e) {  // TODO Auto-generated catch block  e.printStackTrace();  System.out.println("沒有足夠權(quán)限,即不能訪問私有對(duì)象"); } catch (ClassNotFoundException e) {  // TODO Auto-generated catch block  System.out.println("類不存在");  e.printStackTrace(); }  return human; }}

最后是客戶端的代碼 

package com.roc.factory;/** * 簡單工廠測試 * @author liaowp * */public class Client { public static void main(String[] args) {// Human man = SampleFactory.makeHuman("man");// man.say();// Human womman = SampleFactory.makeHuman("womman");// womman.say();// Human test = SampleFactory.makeHuman("tttt");  Human man = SampleFactory1.makeHuman(Man.class); man.say(); Human woman = SampleFactory1.makeHuman(Woman.class); woman.say(); }}

簡單工廠模式應(yīng)用場景 

優(yōu)點(diǎn):工廠類是整個(gè)模式的關(guān)鍵.包含了必要的邏輯判斷,根據(jù)外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個(gè)具體類的對(duì)象.通過使用工廠類,外界可以從直接創(chuàng)建具體產(chǎn)品對(duì)象的尷尬局面擺脫出來,僅僅需要負(fù)責(zé)“消費(fèi)”對(duì)象就可以了。而不必管這些對(duì)象究竟如何創(chuàng)建及如何組織的.明確了各自的職責(zé)和權(quán)利,有利于整個(gè)軟件體系結(jié)構(gòu)的優(yōu)化。

缺點(diǎn):由于工廠類集中了所有實(shí)例的創(chuàng)建邏輯,違反了高內(nèi)聚責(zé)任分配原則,將全部創(chuàng)建邏輯集中到了一個(gè)工廠類中;它所能創(chuàng)建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。當(dāng)系統(tǒng)中的具體產(chǎn)品類不斷增多時(shí)候,可能會(huì)出現(xiàn)要求工廠類根據(jù)不同條件創(chuàng)建不同實(shí)例的需求.這種對(duì)條件的判斷和對(duì)具體產(chǎn)品類型的判斷交錯(cuò)在一起,很難避免模塊功能的蔓延,對(duì)系統(tǒng)的維護(hù)和擴(kuò)展非常不利;

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 深州市| 水富县| 上饶县| 和龙市| 明星| 吕梁市| 隆子县| 封丘县| 兰考县| 鄂尔多斯市| 青河县| 莒南县| 阿拉尔市| 股票| 潢川县| 武威市| 乡宁县| 大方县| 南江县| 江孜县| 梅州市| 玉龙| 讷河市| 额济纳旗| 尚义县| 渝中区| 桐梓县| 大关县| 怀仁县| 衡东县| 余庆县| 汉阴县| 贡觉县| 北票市| 平遥县| 内黄县| 丹寨县| 苏尼特左旗| 龙里县| 重庆市| 镇安县|