• 1.1(设计模式)工厂模式


     工厂模式:

    工厂模式通过工厂创建对象,用户无需注意内部细节,只需要调用工厂类,

    将需要创建的类名称传递给工厂即可。

    采用工程类创建,最后返回的是接口类型,所以只用关心接口,不用关心接口的具体实现类。

    Shape接口

    public interface Shape {
        public void draw();
    }

    实现Shape接口的具体类:

    public class Circle implements Shape{
    
        @Override
        public void draw() {
            System.out.println("draw circle");
        }  
    }
    public class Rectangle implements Shape{
    
        @Override
        public void draw() {
            System.out.println("draw rectangle");
        }
    }
    public class Square implements Shape{
    
        @Override
        public void draw() {
            System.out.println("draw square");
        }
    }

    ShapeFactory工厂:

    public class ShapeFactory {
        public Shape getShape(String shape) {//传递图像字符串,根据字符串判断并实例化对应对象
            if("circle".equals(shape)) {
                return new Circle();
            }else if("rectangle".equals(shape)) {
                return new Rectangle();
            }else if("square".equals(shape)) {
                return new Square();
            }
            return null;
        } 
    }

    Main调用ShapeFactory实例化对象

    public class Main {
        public static void main(String[] args) {
            ShapeFactory shapeFactory = new ShapeFactory();
            Shape circle = shapeFactory.getShape("circle"); 
            circle.draw();
        }
    }
    运行结果:
    draw circle

    ShapeFatory中采用if else,当工厂中类多了后采用if else不易于扩展,且代码结构复杂不好分析。

    故将图形用枚举类型代替,结合switch代替if else.

    图形枚举

    public enum ShapeEnum {
        CIRCLE,RECTANGLE,SQUARE
    }

    ShapeFactory

    public class ShapeFactory {
        public Shape getShape(ShapeEnum shape) {
            switch(shape) {
            case CIRCLE:       return new Circle();
            case RECTANGLE:    return new Rectangle();
            case SQUARE:    return new Square();
            default : try {//没有找到指定类型则抛出ClassNotFound异常
                    throw new ClassNotFoundException();
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            return null;
        } 
    }

    Main

    public class Main {
        public static void main(String[] args) {
            ShapeFactory shapeFactory = new ShapeFactory();
            Shape circle = shapeFactory.getShape(ShapeEnum.CIRCLE); 
            circle.draw();
        }
    }
    运行结果:
    draw circle

    参考资料:

    http://www.runoob.com/design-pattern/factory-pattern.html

  • 相关阅读:
    历史博文汇总
    Golang快速入门:从菜鸟到大佬
    网络1911、1912 DS第4次作业--批改总结
    [机器学习实战-Logistic回归]使用Logistic回归预测各种实例
    [机器学习实战-kNN算法]约会网站问题和手写数字系统实例
    SQL学习笔记(一)之基础语句
    Python学习笔记(九)之面向对象编程(下)
    Python学习笔记(八)之面向对象编程(上)
    Python学习笔记(七)之Python模块
    Python学习笔记(六)之函数式编程
  • 原文地址:https://www.cnblogs.com/huang-changfan/p/10692258.html
Copyright © 2020-2023  润新知