成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

工廠模式(FactoryMethod)

jhhfft / 2282人閱讀

摘要:簡單靜態(tài)工廠方法創(chuàng)建接口或抽象類具體實(shí)現(xiàn)類創(chuàng)建工廠調(diào)用輸出缺點(diǎn)如果要加入新的類,不僅要修改調(diào)用代碼,還要修改工廠類代碼,違反了開閉原則。

一般實(shí)現(xiàn)

創(chuàng)建實(shí)體類

   public class WithOutEntityA {
        public WithOutEntityA(){
            System.out.println("create WithOutEntityA ...");
        }
    }
    
    public class WithOutEntityB {
        public WithOutEntityB(){
            System.out.println("create WithOutEntityB ...");
        }
    }

調(diào)用方法

    public static void main(String[] args) {
        new WithOutEntityA();
        new WithOutEntityB();
    }

輸出

    create WithOutEntityA ...
    create WithOutEntityB ...

問題
new操作符是創(chuàng)建對(duì)象最常用的方法,但是在一些情況下,new方法會(huì)產(chǎn)生一些問題,或者并不能滿足需求,也就是說,對(duì)象的創(chuàng)建是一個(gè)過程,而不是一個(gè)操作。

簡單/靜態(tài)工廠方法

創(chuàng)建接口或抽象類

    public interface IEntity {
    }

具體實(shí)現(xiàn)類

    public class EntityA implements IEntity {
        public EntityA(){
            System.out.println("create EntityA ...");
        }
    }
    
    public class EntityB implements IEntity {
        public EntityB(){
            System.out.println("create EntityB ...");
        }
    }

創(chuàng)建工廠

    public class SimpleFactory {
        public IEntity create(String type){
            IEntity entity = null;
            if(type.equals("A")){
                entity = new EntityA();
            }else if(type.equals("B")){
                entity = new EntityB();
            }
            return entity;
        }
    }

調(diào)用

    public static void main(String[] args) {
        SimpleFactory simpleFactory = new SimpleFactory();
        simpleFactory.create("A");
        simpleFactory.create("B");
    }

輸出

    create EntityA ...
    create EntityB ...

缺點(diǎn)
如果要加入新的類,不僅要修改調(diào)用代碼,還要修改工廠類代碼,違反了開閉原則。

工廠方法模式

組成
1.一個(gè)抽象工廠類
2.多個(gè)具體工廠類
3.一個(gè)抽象產(chǎn)品類或產(chǎn)品接口
4.多個(gè)具體產(chǎn)品類,每個(gè)具體產(chǎn)品類,對(duì)應(yīng)一個(gè)具體工廠類

具體實(shí)現(xiàn)
定義產(chǎn)品接口

    public interface IEntity {
    }
定義具體產(chǎn)品類
    public class EntityA implements IEntity {
        public EntityA(){
            System.out.println("create EntityA ...");
        }
    }
    
    public class EntityB implements IEntity {
        public EntityB(){
            System.out.println("create EntityB ...");
        }
    }
定義抽象工廠
    public abstract class Factory {
        public abstract IEntity create();
    }
定義具體工廠
    public class FactoryA extends Factory{
        @Override
        public IEntity create() {
            return new EntityA();
        }
    }
    
    public class FactoryB extends Factory{
        @Override
        public IEntity create() {
            return new EntityB();
        }
    }
調(diào)用方法
    public static void main(String[] args) {
        Factory factory = new FactoryA();
        factory.create();
        factory = new FactoryB();
        factory.create();
    }
輸出
    create EntityA ...
    create EntityB ...

優(yōu)點(diǎn)
能夠輕松構(gòu)建對(duì)象實(shí)例,而不必關(guān)心對(duì)象實(shí)例創(chuàng)建的發(fā)雜過程,對(duì)對(duì)象的創(chuàng)建進(jìn)行了包裝,將對(duì)象的具體創(chuàng)建過程隔離起來,提高靈活度。

源碼

https://github.com/Seasons20/DisignPattern.git

END

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/69283.html

相關(guān)文章

  • Chap3:創(chuàng)建型設(shè)計(jì)模式————工廠方法設(shè)計(jì)模式(上)

    摘要:利用工廠方法模式,請求者發(fā)出請求,而不具體創(chuàng)建產(chǎn)品。正是因?yàn)檫@個(gè)原因,使用工廠方法模式可以簡化復(fù)雜的創(chuàng)建過程,關(guān)鍵就在于它在維持一個(gè)公共接口。 創(chuàng)建型設(shè)計(jì)模式 包括以下五種: 抽象工廠 生成器 工廠方法 原型 單例 我們選擇工廠方法和原型模式作為將用PHP實(shí)現(xiàn)的創(chuàng)建型設(shè)計(jì)的例子工廠方法模式是這5個(gè)設(shè)計(jì)模式中唯一的一種類設(shè)計(jì)模式原型模式屬于對(duì)象類模式,可以使用PHP_clone方法實(shí)...

    A Loity 評(píng)論0 收藏0
  • Java 設(shè)計(jì)模式工廠模式

    摘要:與以往的使用的方式不同,工廠模式使用工廠實(shí)例化對(duì)象。抽象工廠模式亮相抽象工廠模式抽象工廠模式提供一個(gè)接口,用于創(chuàng)建相關(guān)或依賴對(duì)象的家族,而不需要明確指定具體類。 寫在前面 這篇博文介紹設(shè)計(jì)模式的形式將與其他篇博文不太一樣,這里我們將從一個(gè)問題入手,逐步了解到簡單工廠、工廠方法與抽象工廠模式。 PS:這篇博文涉及的內(nèi)容較多,所以篇幅有點(diǎn)長,請耐心閱讀。 為什么要使用工廠模式? 在 OO ...

    Jochen 評(píng)論0 收藏0
  • 《重構(gòu)---改善既有代碼的設(shè)計(jì)》

    摘要:為何重構(gòu)重構(gòu)有四大好處重構(gòu)改進(jìn)軟件設(shè)計(jì)如果沒有重構(gòu),程序的設(shè)計(jì)會(huì)逐漸腐敗變質(zhì)。經(jīng)常性的重構(gòu)可以幫助維持自己該有的形態(tài)。你有一個(gè)大型函數(shù),其中對(duì)局部變量的使用使你無法采用。將這個(gè)函數(shù)放進(jìn)一個(gè)單獨(dú)對(duì)象中,如此一來局部變量就成了對(duì)象內(nèi)的字段。 哪有什么天生如此,只是我們天天堅(jiān)持。 -Zhiyuan 國慶抽出時(shí)間來閱讀這本從師傅那里借來的書,聽說還是程序員的必讀書籍。 關(guān)于書的高清下載連...

    baihe 評(píng)論0 收藏0
  • JavaScript工廠模式

    摘要:基于工廠角色和產(chǎn)品角色的多態(tài)性設(shè)計(jì)是工廠方法模式的關(guān)鍵。工廠方法模式之所以又被稱為多態(tài)工廠模式,是因?yàn)樗械木唧w工廠類都具有同一抽象父類。工廠方法模式總結(jié)工廠方法模式是簡單工廠模式的進(jìn)一步抽象和推廣。 JavaScript工廠模式 首先需要說一下工廠模式。工廠模式根據(jù)抽象程度的不同分為三種 簡單工廠模式 工廠方法模式 抽象工廠模式 1.簡單工廠模式 簡單工廠模式:又稱為靜態(tài)工廠方法...

    oujie 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

jhhfft

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<