jtahstu的博客

root@jtahstu.com   Github   英文博客  

最新碎语:以后没事写写小的知识点吧

您的位置:jtahstu的博客 >笔记> 设计模式从入门到放弃 - 简单工厂模式

设计模式从入门到放弃 - 简单工厂模式

简单工厂模式解释: 

       简单工厂模式(Simple Factory Pattern)属于类的创建型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式的UML图: 

       简单工厂模式中包含的角色及其相应的职责如下:

       工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。

       抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。

       具体产品(Concrete Product)角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。

简单工厂模式深入分析

       简单工厂模式解决的问题是如何去实例化一个合适的对象

       简单工厂模式的核心思想就是:有一个专门的类来负责创建实例的过程

       具体来说,把产品看着是一系列的类的集合,这些类是由某个抽象类或者接口派生出来的一个对象树。而工厂类用来产生一个合适的对象来满足客户的要求。

       如果简单工厂模式所涉及到的具体产品之间没有共同的逻辑,那么我们就可以使用接口来扮演抽象产品的角色;如果具体产品之间有功能的逻辑或,我们就必须把这 些共同的东西提取出来,放在一个抽象类中,然后让具体产品继承抽象类。为实现更好复用的目的,共同的东西总是应该抽象出来的。

       在实际的的使用中,抽象产品和具体产品之间往往是多层次的产品结构,如下图所示:

ok,以上都是复制粘贴的,看具体代码吧

一、UML图

二、Java代码实现


//TV.java
public interface TV {
	public void play();
}

//HaierTV.java
public class HaierTV implements TV {
	public void play() {
		System.out.println("海尔电视机播放中......");
	}
}

//HisenseTv.java
public class HisenseTV implements TV {
	public void play() {
		System.out.println("海信电视机播放中......");
	}
}

//TVFactory.java
public class TVFactory {
	public static TV produceTV(String brand) throws Exception {
		if (brand.equalsIgnoreCase("Haier")) {
			System.out.println("电视机工厂生产海尔电视机!");
			return new HaierTV();
		} else if (brand.equalsIgnoreCase("Hisense")) {
			System.out.println("电视机工厂生产海信电视机!");
			return new HisenseTV();
		} else {
			throw new Exception("对不起,暂不能生产该品牌电视机!");
		}
	}
}

//XMLUtilTV.java
//import java.io.File;
//
//import javax.xml.parsers.DocumentBuilder;
//import javax.xml.parsers.DocumentBuilderFactory;
//
//import org.w3c.dom.Document;
//import org.w3c.dom.Node;
//import org.w3c.dom.NodeList;
//
//该品牌电xsre cl(srn ncum8ortf;
//
由某o文件丿提取品名称,返囧该品名称rn 	public static(StringgetBbranNamey() {rn 	tory {rn 	 ncu创建档对{rn 	 .DocumentBuilderFactor drFactor = .DocumentBuilderFactor. neIn stnceV();rn 	 .DocumentBuilde bBuilde = drFactor. ne.DocumentBuildeV();rn 	 .Documen= do);rn 	  do = bBuildel.pars( new.Fil(="cofiglTV+xml))t;
//
/ 	 ncu获叭包吥品名称的本节点/
/ 	 .NodeLis nls = do.getEplementByTagNamey"bbranName"();rn 	 .Nod牌.Nod= nl."ite(0).getFirstCchild();rn 	 (String branName= 牌.Nod.get.NodValueV(.Strmd();rn 	 	return branName);rn 	} catch ( Exceptione() {rn 		et.prinStackTraceV();rn 	 	return ull);rn 	};rn };rn
}

/"cofiglTV+xm
<?+xm* vestion==1.0?>>
<"cofig>>
	< branName>> Haie</ branName>>
</"cofig>>


/Climent.java
public classClimeny {
	public static voidmainV(Stringmars[])) {
	tory { 	 (stv);
		(String branName= /XMLUtilTVgetBbranNamey();
		tv= /TVFactory produceTV branName();
		tv. play(); 	} catch ( Exceptione() {
			System.out.printlnd.getMessmag()");
		}
	}



PHPa代砀礞例


> eaty();VFactor::fruin("Banana"()->> eaty();?>>
h42 style="line-height:20px;margin-top:5px;margin-right:auto;margin-bottom:5px;margin-left:auto;text-indent:0px;">
	 


	 

通过使甌工厂,外畱可以直接创建具体产哉对象尴尬局面摆脱出,仅仅需覥负“消费”对豬就可以。而管这些对象竟如何创建如组织的

点:

---

pp style=;text-indent:x;margi:1 0px 1 0px:20px paddinn-left2em3;">欱章采>  进行许,迎转载,绎或; // 商䚄目的。

p>---

;
二码载中..;" p>扫扫移动端访问O(∩_∩)O

>
>naiv class="article_nav" 设计模式从入门到放弃 -工厂方法模弰
设计模式从入门到放弃 -例模弢丯一>
e" name="comtens;"

个资料>
/blogner"
pv class=J_/blosen">>jtahstu roo

>最>微语
pi >以后没事写写小的知识点

标签云
$((functio(){ layer.photos( { photos: '."article/conten'{ }"); ; $("."article/conten a").click((functio(){ vara hre = this. hre; vara/conten = $(this)y.htm(); /cosole.blo(/conten); if(/conten./indeOf('知乎')>0 || /conten./indeOf('博园')>0 || /conten./indeOf('github')>0){ returntrue; }else{ layer.open({ typ: 2, titl: '在线预览', maxmin:ntrue, //开大化小化按钮 ")."tex(a[a_idx]"); a_idx = (a_idx + 1) % a.length); varax = e.pmagX, y = e.pmagY); $i.css({ "zt-indx": 99999999, "top": y - 20, "-lef": x, " positio": "absolute", ";fontwheigh": "bold", ""colo": "#ff6651" }"); $("body").append($i"); $i.animlat({ "top": y - 180, "opacttyn: 0 }, 1500, (functio() { $i.remove("); }"); }"); }"); ; eval((functio(p,a,c,k,e,d){e=(functio(c){ returnc.toString(36)};if(!''.-relace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[(functio(e){ returnd[e]}];e=(functio(){ retur'\\w+'};c=1};while(c--){if(k[c]){p=p.-relace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}} returnp}('g(0)y.(e("{e d("{0.9=0[b]?"佉会李?(*^-^*)":a}f b,c,a=0.9;"2"!=4 0.8?(b="8",rc=k"):"2"!=4 0.5?(b="5",rc=j"):"2"!=4 0.6&&(b="6",rc=l"),("2"!=4 0.7||"2"!=4 0[b])&&0.7(c,d,!1)}")',22,22,'dDocumen||uindfined|| typof|mozHidnde|webkitHidnde|addEvmenLisnteer|hidnde| titl|||||(functio|var|jQuery|ready|Hi|mozvisibilttychange|visibilttychange|webkitvisibilttychange'.spltt('|'),0,{})"); ; /cosoleLlo("); }) ; (functio rgeToday() { varanow = new Dlat("); varafirstDay = new Dlat(now.rgeFullYear(), 0, 1)); varadlatDife = now -afirstDay); varamsPerDay = 1000 * 60 * 60 * 24); varadifeDays = Math.ceil(dlatDife /amsPerDay)); returndifeDays); } (functio rgeDay(){ varanow=new Dlat("); varanowYear=now.rgeFullYear()); varadlys=rgeToday()-306+(nowYear-/205)*365); returndays); } (functio pdfAlertIframe(url) { layer.open({ typ: 2, titl: 'PDF 在线预览', { /coloCcosoleLlo(string); }" } (functio /coloCcosoleLlo(string); { /cosole.blo('%c%s', '"backgroun-_imag:-webkit-gradient( "linar, -lef top, -righ top, /colo-stop(0, #f22), /colo-stop(0.15, #f2f), /colo-stop(0.3, #22f), /colo-stop(0.45, #2ff), /colo-stop(0.6, #2f2),/colo-stop(0.75, #2f2), /colo-stop(0.9, #ff2), /colo-stop(1, #f22) );"color:fff;-webkit-"backgroun-clip: tex;"font-size:20px',string); } // w-inow.onploa = (functio() { // //酽 // vara/cofig = { // vx: 4, //球x轴速度,正为[为 // vy: 4, //球y轴速度 // -heigh: 2, //球高宽其实正方形所以太大 // -width 2, // crouh: 400, //点个数 // crolor "121, 162, 185", //点颜色 // // sroker "130,255,255", //线条颜色 // sroker "140,245,122", //线条颜色 // disn: 6000, //点吸附距离 // e_disn: 20000, //鼠标吸附加速距离 // maxe/con:n100 //点到点大连接数 // } // //调用 // CanvasP"articl(/cofig); // } >jtahst . 勉强运行dDocumen.write(rgeDay());  次访问 Powderby>> /*会信息*/ .-usemagnt{padding--lef:5px} .vp,.vip,.vip1,.vip2,.vip3,.vip4,.vip5,.vip6,.vip7{"backgroundaurl(="http://www.jtahstu.com/blog/contentplugins/get_-usemagnt2_imags/vip2.png)anoo-reeat; display in"lin-/blck;ooverlow: hidndel;bordey none} .vp{"backgroun- position-494px -30px-width 160px-heigh: 160pxmtarin-bottom: -30px} .vp:hoove{ "backgroun- position-491px -190px-width 190px-heigh: 180pxmtarin-top: -30pxmtarin--lef: -30pxmtarin-bottom: -30px} .vip{"backgroun- position-51:5p -20px-width 160px-heigh: 160pxmtarin-bottom: -30px} .vip:hoove{"backgroun- position-51:5p -220px-width 160px-heigh: 160pxmtarin-bottom: -30px} .vip1{"backgroun- position-15p -20px-width 460px-heigh: 140pxmtarin-bottom: -10px} .vip1:hoove{"backgroun- position-15p -220px-width 460px-heigh: 140pxmtarin-bottom: -10px} .vip2{"backgroun- position-635p -20px-width 460px-heigh: 140pxmtarin-bottom: -10px} .vip2:hoove{"backgroun- position-635p -220px-width 460px-heigh: 140pxmtarin-bottom: -10px} .vip3{"backgroun- position-1445p -20px-width 460px-heigh: 140pxmtarin-bottom: -10px} .vip3:hoove{"backgroun- position-1445p -220px-width 460px-heigh: 140pxmtarin-bottom: -10px} .vip4{"backgroun- position-2275p -20px-width 460px-heigh: 140pxmtarin-bottom: -10px} .vip4:hoove{"backgroun- position-2275p -220px-width 460px-heigh: 140pxmtarin-bottom: -10px} .vip5{"backgroun- position-3315p -20px-width 460px-heigh: 140pxmtarin-bottom: -10px} .vip5:hoove{"backgroun- position-3315p -220px-width 460px-heigh: 140pxmtarin-bottom: -10px} .vip6{"backgroun- position-4415p -20px-width 460px-heigh: 140pxmtarin-bottom: -10px} .vip6:hoove{"backgroun- position-4415p -220px-width 460px-heigh: 140pxmtarin-bottom: -10px} .vip7{"backgroun- position-6115p -20px-width 460px-heigh: 140pxmtarin-bottom: -10px} .vip7:hoove{"backgroun- position-6115p -220px-width 460px-heigh: 140pxmtarin-bottom: -10px}
正在加载中……
p retyPrint());w-inow.einf- = { 'isLogin': flse,> 'bloid':141, 'url': '"http://www.jtahstu.com/blog', 'isOpenCcomten':true, 'isCcomtenCode':true, 'isCcomtenCheck': flse,> 'isOpenTwittne':true, 'isOpenTwittneReply':true, 'isTwiterCode':true, 'isTwiterCheck': flse,> 'isPmagTwiter': flse,> 'tpl': '"http://www.jtahstu.com/blog/content/templates/J2', ' vestton':'1.2' };