設(shè)計(jì)模式:創(chuàng)建對(duì)象之Factory
Posted on 2007-05-29 15:12 zht 閱讀(1040) 評(píng)論(0) 編輯 收藏 所屬分類: 設(shè)計(jì)模式1、引入Factory Pattern的目的是為了封裝類的實(shí)例化操作
public class Factory{
public static Sample creator(int which){
//getClass 產(chǎn)生Sample 一般可使用動(dòng)態(tài)類裝載裝入類。
if (which==1)
return new SampleA();
else if (which==2)
return new SampleB();
}
}
那么在你的程序中,如果要實(shí)例化Sample時(shí).就使用
Sample sampleA=Factory.creator(1);
這樣,在整個(gè)就不涉及到Sample的具體子類,達(dá)到封裝效果,也就減少錯(cuò)誤修改的機(jī)會(huì),這個(gè)原理可以用很通俗的話來比喻:就是具體事情做得越多,越容易范錯(cuò)誤
2、Factory Pattern在父類規(guī)定對(duì)象的創(chuàng)建方法,但不深入到具體的類名,所有具體的實(shí)現(xiàn)都放在了子類,大致可以分為產(chǎn)生對(duì)象實(shí)例的大綱(框架)和實(shí)際產(chǎn)生對(duì)象實(shí)例的類兩方面
實(shí)例:
framework中的Factory是實(shí)現(xiàn)creat的抽象類
public final Product creat(String owner) {
Product p = creadProduct(owner);
registerProduct(p);
return p;
}
public abstract Product creadProduct(String owner);
famework中的Product是僅實(shí)現(xiàn)use方法的抽象類
具體的生成和使用方法都用idcard中的類具體實(shí)現(xiàn)
IDcardFactory:
IDcardFactory extends Factory
public synchronized Product creadProduct(String owner) {
IDcard ic = new IDcard(owner);
return ic;
}
IDcarrd:
class IDcard extends Product
IDcard(String owner) {
System.out.println("建立" + owner +"的卡");
this.owner = owner;
}
此處構(gòu)造函數(shù)不是public 只有通過同一個(gè)包中的factory才可以產(chǎn)生這個(gè)對(duì)象實(shí)例
public void use() {
System.out.println("使用" + owner + "的卡");
}
具體使用:
public static void main(String[] args) {
Factory fc = new IDcardFactory();
Product p1 = fc.creat("card1");
Product p2 = fc.creat("card2");
Product p3 = fc.creat("card3");
p1.use();
p2.use();
p3.use();
}
這樣不必修改framework包中的內(nèi)容就能夠創(chuàng)建出不同的產(chǎn)品和工廠