2、抽象工廠模式

對工廠模式的形狀實例進(jìn)行擴(kuò)展,增加顏色填充功能。

類圖
  • 形狀和顏色接口
public interface Color {
    void fill();
}
------------------------------------------------------
public interface Shape {
    void draw();
}
  • 顏色實現(xiàn)類(形狀的實現(xiàn)類上一篇有)
public class Blue implements Color{
    @Override
    public void fill() {
        System.out.println("fill Blue color!");
    }
}
------------------------------------------------------
public class Red implements Color{
    @Override
    public void fill() {
        System.out.println("fill Red color!");
    }
}
------------------------------------------------------
public class Yellow implements Color{
    @Override
    public void fill() {
        System.out.println("fill Yellow color!");
    }
}
  • 為 Color 和 Shape 對象創(chuàng)建抽象類來獲取工廠
public interface AbstractFactory {
    Color getColor(String color);
    Shape getShape(String shape);
}
  • 創(chuàng)建擴(kuò)展了 AbstractFactory 的工廠類,基于給定的信息生成實體類的對象
public class ColorFactory implements AbstractFactory{

    @Override
    public Color getColor(String color) {
        if(color == null){
            return null;
        }
        if(color.equalsIgnoreCase("RED")){
            return new Red();
        } else if(color.equalsIgnoreCase("YELLOW")){
            return new Yellow();
        } else if(color.equalsIgnoreCase("BLUE")){
            return new Blue();
        }
        return null;
    }

    @Override
    public Shape getShape(String shape) {
        return null;
    }
}
----------------------------------------------------------------------------------
public class ShapeFactory implements AbstractFactory{

    @Override
    public Color getColor(String color) {
        return null;
    }

    @Override
    public Shape getShape(String shape) {
        if(shape == null){
            return null;
        }
        if(shape.equalsIgnoreCase("CIRCLE")){
            return new Circle();
        } else if(shape.equalsIgnoreCase("RECTANGLE")){
            return new Rectangle();
        } else if(shape.equalsIgnoreCase("SQUARE")){
            return new Square();
        }
        return null;
    }
}
  • 創(chuàng)建一個工廠創(chuàng)造器/生成器類,通過傳遞形狀或顏色信息來獲取工廠
public class FactoryProducer {
    public static AbstractFactory getFactory(String choice){
        if(choice.equalsIgnoreCase("SHAPE")){
            return new ShapeFactory();
        } else if(choice.equalsIgnoreCase("COLOR")){
            return new ColorFactory();
        }
        return null;
    }
}
  • 使用 FactoryProducer 來獲取 AbstractFactory,通過傳遞類型信息來獲取實體類的對象
public class AbstractFactoryPatternDemo {
    public static void main(String[] args) {
        AbstractFactory colorFatory = FactoryProducer.getFactory("color");
        Color red = colorFatory.getColor("red");
        red.fill();
        Color yellow = colorFatory.getColor("yellow");
        yellow.fill();
        Color blue = colorFatory.getColor("blue");
        blue.fill();

        AbstractFactory shapeFactory = FactoryProducer.getFactory("shape");
        Shape rectangle = shapeFactory.getShape("rectangle");
        rectangle.draw();
        Shape circle = shapeFactory.getShape("circle");
        circle.draw();
        Shape square = shapeFactory.getShape("square");
        square.draw();
    }
}
  • 輸出結(jié)果:
fill Red color!
fill Yellow color!
fill Blue color!
Draw Rectangle!
Draw Circle!
Draw Square!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠創(chuàng)建其他工廠。該超級工廠又稱為其...
    dinel閱讀 87評論 0 0
  • 簡介 圍繞一個超級工廠創(chuàng)建其他工廠。該超級工廠又稱為其他工廠的工廠。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種...
    無敵大俊俊丶閱讀 469評論 0 1
  • 一、介紹 意圖:提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類。主要解決:主要解決接口選擇的問...
    聶叼叼閱讀 186評論 0 1
  • 抽象工廠模式 抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最具一般性的一種形態(tài)。抽象工廠模式是指當(dāng)有多個抽象角色時...
    阿博聊編程閱讀 177評論 0 1
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險厭惡者,不喜歡去冒險,但是人生放棄了冒險,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 7,604評論 0 4

友情鏈接更多精彩內(nèi)容