美文网首页
创建型模式:01-简单工厂模式

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

作者: 综合楼 | 来源:发表于2021-06-08 21:53 被阅读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

    相关文章

      网友评论

          本文标题:创建型模式:01-简单工厂模式

          本文链接:https://www.haomeiwen.com/subject/bbtceltx.html