抽象工厂模式

抽象工厂模式

内容参考 W3c School

类型:创建型设计模式

解决场景:一个问题中解决多个方面事情。购买一辆车,包含配套的保险,选择车辆颜色等。


目录

抽象工厂模式

UML类图

一 创建 Color 和 Shape接口

二 创建实体类

ShapeType

ColorType

Circle

Square

Rectangle

Red

Blue

Green

三 创建抽象工厂

四 创建工厂

ColorFactory

ShapeFactory

五 工厂创建者

六 Main

七 运行


 

UML类图

用户通过在工厂的前台进行套餐定制,选择产品的形状以及配套的颜色。然后分别由形状工厂去绘制形状,颜色工厂来填充对应颜色。

一 创建 Color 和 Shape接口

public interface Color {
    /**
     * 填充颜色
     */
    public abstract void fill();
}
public interface Shape {
    /**
     * 绘制图形
     */
    public abstract void draw();
}

二 创建实体类

ShapeType

public class ShapeType {
    public static final String CIRCLE = "circle";
    public static final String RECTANGLE = "rectangle";
    public static final String SQUARE = "square";
}

ColorType

public class ColorType {
    public static final String RED = "red";
    public static final String BLUE = "blue";
    public static final String GREEN = "green";
}

Circle

public class Circle implements Shape {
    /**
     * 绘制圆形
     */
    @Override
    public void draw() {
        System.out.println("[Circle] Draw");
    }
}

Square

public class Square implements Shape {
    /**
     * 绘制矩形
     */
    @Override
    public void draw() {
        System.out.println("[Square] Draw");
    }
}

Rectangle

public class Rectangle implements Shape {
    /**
     * 绘制三角形
     */
    @Override
    public void draw() {
        System.out.println("[Rectangle] Draw");
    }
}

Red

public class Red implements Color{
    /**
     * 填充红色
     */
    @Override
    public void fill() {
        System.out.println("[Red] fill");
    }
}

Blue

public class Blue implements Color{
    /**
     * 填充蓝色
     */
    @Override
    public void fill() {
        System.out.println("[Blue] fill");
    }
}

Green

public class Green implements Color{
    /**
     * 填充绿色
     */
    @Override
    public void fill() {
        System.out.println("[Green] fill");
    }
}

三 创建抽象工厂

public abstract class AbstractFactory {

    /**
     * 获取填充的颜色
     * @param color 颜色名称
     * @return 颜色对象
     */
    abstract Color getColor(String color);

    /**
     * 获取绘制的图形
     * @param shapeType 图形名称
     * @return 图形对象
     */
    abstract Shape getShape(String shapeType);
}

四 创建工厂

ColorFactory

public class ColorFactory extends AbstractFactory{
    @Override
    Color getColor(String color) {
        if ("".equalsIgnoreCase(color) || null == color){
            return null;
        }
        if (RED.equalsIgnoreCase(color)){
            return new Red();
        }else if (BLUE.equalsIgnoreCase(color)){
            return new Blue();
        }else if (GREEN.equalsIgnoreCase(color)){
            return new Green();
        }
        return null;
    }

    @Override
    Shape getShape(String shapeType) {
        return null;
    }
}

ShapeFactory

public class ShapeFactory extends AbstractFactory{
    @Override
    Color getColor(String color) {
        return null;
    }

    @Override
    Shape getShape(String shapeType) {
        if ("".equalsIgnoreCase(shapeType) || null == shapeType){
            return null;
        }
        if (CIRCLE.equalsIgnoreCase(shapeType)){
            return new Circle();
        }else if (SQUARE.equalsIgnoreCase(shapeType)){
            return new Square();
        }else if (RECTANGLE.equalsIgnoreCase(shapeType)){
            return new Rectangle();
        }
        return null;
    }
}

五 工厂创建者

public class FactoryProducer {

    public static String color = "color";
    public static String shape = "shape";

    public static AbstractFactory getFactory(String choice){
        if (shape.equalsIgnoreCase(choice)){
            return new ShapeFactory();
        }else if (color.equalsIgnoreCase(choice)){
            return new ColorFactory();
        }
        return null;
    }
}

六 Main

public class ExecuteMain {
    public static void main(String[] args) {
        AbstractFactory shapeFactory = FactoryProducer.getFactory("shape");
        AbstractFactory colorFactory = FactoryProducer.getFactory("color");
        Shape circle = shapeFactory.getShape("circle");
        Shape rectangle = shapeFactory.getShape("rectangle");
        Shape square = shapeFactory.getShape("square");
        circle.draw();
        rectangle.draw();
        square.draw();
        Color red = colorFactory.getColor("red");
        Color blue = colorFactory.getColor("blue");
        Color green = colorFactory.getColor("green");
        red.fill();
        blue.fill();
        green.fill();
    }
}

七 运行

[Circle] Draw
[Rectangle] Draw
[Square] Draw
[Red] fill
[Blue] fill
[Green] fill

Process finished with exit code 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值