首页 > 其他 > 详细

1.1(设计模式)工厂模式

时间:2019-04-25 21:56:36      阅读:150      评论:0      收藏:0      [点我收藏+]

 工厂模式:

技术分享图片

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

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

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

 

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

1.1(设计模式)工厂模式

原文:https://www.cnblogs.com/huang-changfan/p/10692258.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!