Java設計模式--抽象工廠模式


角色:

抽象工廠角色:擔任這個角色是模式的核心,他應該是與應用商業系統無關的。通常是Java接口或Java抽象類,其他的具體工廠類必須實現這個Java接口或繼承這個Java抽象類。

具體工廠角色:這個角色直接在客戶端的調用下創建產品的實例,這個角色含有選擇合適的產品對象的邏輯,而這個邏輯是與應用系統商業邏輯緊密相關的。

抽象產品角色:這個角色是工廠模式所創建的對象的父類,或他們共同的接口。

具體產品角色:抽象工廠模式所創建的任何產品對象都是某一個具體產品類的實例。這是客戶端最終需要的東西,其內部充滿了商業邏輯。

類結構圖:

  

 

水果抽象接口:

package com.design.abstractfactory;

public interface Fruit {

    void fruitInfo();
}

 

蔬菜抽象接口:

package com.design.abstractfactory;

public interface Vegetable {

    void vegetableInfo();
}

 

工廠抽象接口:

package com.design.abstractfactory;

public interface Factory {

    Fruit createFruit();

    Vegetable createVegetable();
}

 

具體類:北方水果

package com.design.abstractfactory;

public class NorthFruit implements Fruit {
    @Override
    public void fruitInfo() {
        System.out.println("North-Apple");
    }
}

 

具體類:南方水果

package com.design.abstractfactory;

public class SouthFruit implements Fruit {
    @Override
    public void fruitInfo() {
        System.out.println("South-Banana");
    }
}

 

具體類:北方蔬菜

package com.design.abstractfactory;

public class NorthVegetable implements Vegetable {
    @Override
    public void vegetableInfo() {
        System.out.println("North-Tomato");
    }
}

 

具體類:南方蔬菜

package com.design.abstractfactory;

public class SouthVegetable implements Vegetable {
    @Override
    public void vegetableInfo() {
        System.out.println("South-Taro");
    }
}

 

具體類:北方產品工廠

package com.design.abstractfactory;

public class NorthProductFactory implements Factory {
    @Override
    public Fruit createFruit() {
        return new NorthFruit();
    }

    @Override
    public Vegetable createVegetable() {
        return new NorthVegetable();
    }
}

 

具體類:南方產品工廠

package com.design.abstractfactory;

public class SouthProductFactory implements Factory {
    @Override
    public Fruit createFruit() {
        return new SouthFruit();
    }

    @Override
    public Vegetable createVegetable() {
        return new SouthVegetable();
    }
}

 

測試類:

package com.design.abstractfactory;

public class Client {

    public static void main(String[] args){
        Factory northFactory = new NorthProductFactory();
        Factory southFactory = new SouthProductFactory();

        System.out.println("北方產品:");
        northFactory.createFruit().fruitInfo();
        northFactory.createVegetable().vegetableInfo();

        System.out.println("南方產品:");
        southFactory.createFruit().fruitInfo();
        southFactory.createVegetable().vegetableInfo();
    }

}

 

輸出:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM