java設計模式【建立模式】之原廠模式

來源:互聯網
上載者:User

gof設計模式之原廠模式大致分為3中方式:

A 簡單原廠模式

B Factory 方法模式

C 抽象原廠模式

 

A 簡單原廠模式:整個模式以工廠類為核心,由工廠類實現指定類型的對象的建立.

方便之處見圖:

代碼實現:

//水果

interface Friut{
    public Friut get();
}

//蘋果
class Apple implements Friut{
    public Friut get(){
        return new Apple();
    }
}

//橘子
class Orange implements Friut{
    public Friut get(){
        return new Orange();
    }
}

//香蕉
class Banana implements Friut{
    public Friut get(){
        return new Banana();
    }
}

//水果廠
class FriutFactory{
    public static Friut make(Friut friut){
        return friut.get();
    }
}

//水果店
class FriutShop{
    public static Friut take(String name){
        if("apple".equals(name)){
            return FriutFactory.make(new Apple());
        }else if("orange".equals(name)){
            return FriutFactory.make(new Orange());
        }else if("banana".equals(name)){
            return FriutFactory.make(new Banana());
        }else{
            System.out.println("暫時沒該水果供售");
            return null;
        }
    }

    public static void main(String[] args){
        System.out.println("進入商店買水果:");
        take("apple");
        take("banana");
        take("orange");
    }

}

 

B Factory 方法模式

從上面的簡單工廠可以看出,如果只是簡單的幾種類別需要產出,那還是很方便的,要是水果店要賣個1000中水果,那工廠裡面可是一大堆的邏輯判斷了..由此引出Factory 方法模式

 

Factory 方法模式:核心工廠類不再負責對象的建立,將建立具體的對象延遲到具體的工廠類中,核心工廠類只負責子工廠類必須實現的介面,而屏蔽建立的細節.

 

這樣就是水果點業務擴大,品種齊全了,實行專一生產.看著比簡單工廠就是正規點

 

代碼實現:

interface Friut{
    public Friut get();
}
class Apple implements Friut{
    public Friut get(){
        return new Apple();
    }
}
class Orange implements Friut{
    public Friut get(){
        return new Orange();
    }
}
class Banana implements Friut{
    public Friut get(){
        return new Banana();
    }
}
interface FriutFactory{
    public Friut makeFriut();
}
class AppleFactory implements FriutFactory{
    @Override
    public Friut makeFriut() {
        return new Apple();
    }   
}
class OrangeFactory implements FriutFactory{
    @Override
    public Friut makeFriut(){
        return new Orange();
    }
}
class BananaFactory implements FriutFactory{
    @Override
    public Friut makeFriut() {
        return new Banana();
    }
   
}

class FriutShop{
    public static Friut take(FriutFactory factory){
        return factory.makeFriut();
    }   
    public static void main(String[] args){
        System.out.println("進入商店買水果:");
        take(new AppleFactory());
        take(new BananaFactory());
        take(new OrangeFactory());
    }
}

 

C 抽象Factory 方法

Factory 方法已經很專一了,為什麼還要抽象工廠呢?

原來水果店規模以後,已經不單單只賣某一種水果了,現在要產品成套銷售(蘋果+香蕉=》天天美容裝)

從現在看,每個工廠都生產不同種類的產品(這裡可能區分不是很明顯,只是用蘋果和蘋果汁帶表示,you can understand ?)

這是Factory 方法和抽象工廠的差別,從單一對象的建立擴充了.

 

代碼實現:

interface Friut{
    public Friut get();
}
interface Drink{
    public Drink get();
}
class AppleCider implements Drink{
    @Override
    public Drink get() {
        return new AppleCider();
    }
   
}
class Apple implements Friut{
    public Friut get(){
        return new Apple();
    }
}

class Orange implements Friut{
    public Friut get(){
        return new Orange();
    }
}
class OrangeCider implements Drink{
    @Override
    public Drink get() {
        return new OrangeCider();
    }
}

class BananaCider implements Drink{
    @Override
    public Drink get() {
        return new BananaCider();
    }
}
class Banana implements Friut{
    public Friut get(){
        return new Banana();
    }
}
interface ShopFactory{
    public Friut makeFriut();
    public Drink makeDrink();
}
class AppleFactory implements ShopFactory{
    @Override
    public Friut makeFriut() {
        return new Apple();
    }

    @Override
    public Drink makeDrink() {
        return new AppleCider();
    }
   
}
class OrangeFactory implements ShopFactory{
    @Override
    public Friut makeFriut(){
        return new Orange();
    }

    @Override
    public Drink makeDrink() {
        return new OrangeCider();
    }
}
class BananaFactory implements ShopFactory{
    @Override
    public Friut makeFriut() {
        return new Banana();
    }
    @Override
    public Drink makeDrink() {
        return new BananaCider();
    }
}

class FriutShop{
    public static String take(ShopFactory factory){
        System.out.println("要是有個有個名字該多好啊.一定記住是一族產品");
        return factory.makeFriut().toString() + factory.makeDrink().toString();
    }   
    public static void main(String[] args){
        System.out.println("進入商店買水果:");
        take(new AppleFactory());
        take(new BananaFactory());
        take(new OrangeFactory());
    }
}

就假設果汁和對應的水果做組合套吧..

這是我的一些理解..要是有問題的話請you 指出啊.

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.