创建型模式:01-简单工厂模式

2021-06-08  本文已影响0人  综合楼

类图:

image.png

示例代码:

image.png
package com.zhs.design.factory.simple.enums;

public enum ToolType {
    CIRCULAR("CIRCULAR", "圆形工具"),
    TRIANGLE("TRIANGLE", "三角形工具"),
    SQUARE("SQUARE", "正方形工具");

    private String code;
    private String desc;

    ToolType(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }
    public String getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }
}

package com.zhs.design.factory.simple.factory;

import com.zhs.design.factory.simple.UnSupportedShapeException;
import com.zhs.design.factory.simple.enums.ToolType;
import com.zhs.design.factory.simple.tools.Circular;
import com.zhs.design.factory.simple.tools.DrawTool;
import com.zhs.design.factory.simple.tools.Square;
import com.zhs.design.factory.simple.tools.Triangle;

public class DrawToolFactory {
    public static DrawTool getDrawTool(String type) throws UnSupportedShapeException {
        if (ToolType.CIRCULAR.getCode().equals(type)){
            return new Circular();
        } else if (ToolType.TRIANGLE.getCode().equals(type)){
            return new Triangle();
        } else if (ToolType.SQUARE.getCode().equals(type)){
            return new Square();
        } else {
            throw new UnSupportedShapeException(type);
        }
    }
}

package com.zhs.design.factory.simple.tools;

----------------------------------------------------------------------------------------
public interface DrawTool {
    void draw();
    void erase();
}
----------------------------------------------------------------------------------------
public class Circular implements DrawTool {
    @Override
    public void draw() {
        System.out.println("画出一个圆形");
    }

    @Override
    public void erase() {
        System.out.println("擦除一个圆形");
    }
}
----------------------------------------------------------------------------------------
public class Square implements DrawTool {
    @Override
    public void draw() {
        System.out.println("画出一个正方形");
    }

    @Override
    public void erase() {
        System.out.println("擦除一个正方形");
    }
}
----------------------------------------------------------------------------------------
public class Triangle implements DrawTool {
    @Override
    public void draw() {
        System.out.println("画出一个三角形");
    }

    @Override
    public void erase() {
        System.out.println("擦除一个三角形");
    }
}
package com.zhs.design.factory.simple;

import com.zhs.design.factory.simple.factory.DrawToolFactory;
import com.zhs.design.factory.simple.tools.DrawTool;

public class DrawClient {
    public static void main(String[] args) {
        String[] toolTypes = {"SQUARE", "TRIANGLE", "CIRCULAR", "NO"};
        for (String type:toolTypes) {
            try {
                DrawTool drawTool = DrawToolFactory.getDrawTool(type);
                drawTool.draw();
                drawTool.erase();
            } catch (UnSupportedShapeException e) {
                System.out.println(e.getMessage());
            }
        }
    }
}
package com.zhs.design.factory.simple;

public class UnSupportedShapeException extends RuntimeException {
    public UnSupportedShapeException(String type) {
        super("异常:不支持该类型:"+type);
    }
}

运行结果:

image.png
上一篇下一篇

猜你喜欢

热点阅读