Swing


          天行健 君子以自強(qiáng)不息

          posts - 69, comments - 215, trackbacks - 0, articles - 16
             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          Factory有兩種理解方式,個(gè)人感覺不太一樣,不知道哪種理解方式比較正確
          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)品和工廠

          主站蜘蛛池模板: 蒲城县| 中阳县| 石河子市| 仁寿县| 平和县| 普洱| 常宁市| 黔西| 太仆寺旗| 安龙县| 礼泉县| 托克逊县| 和政县| 新巴尔虎右旗| 抚顺县| 石狮市| 江西省| 万荣县| 都匀市| 阳春市| 竹溪县| 当涂县| 道真| 灌阳县| 栾城县| 甘孜| 三门峡市| 珲春市| 原平市| 广丰县| 开远市| 承德县| 盐城市| 商城县| 博湖县| 黑山县| 保德县| 太谷县| 峨边| 通道| 麦盖提县|