美文网首页
设计模式[2]-简单工厂模式-Simple Factory Pa

设计模式[2]-简单工厂模式-Simple Factory Pa

作者: 郭寻抚 | 来源:发表于2017-02-21 16:58 被阅读43次

    1. 简单工厂模式简介

    工厂模式是非常用的创建型模式(Creational Pattern)设计模式,通常我们说的工厂模式,就是指工厂方法模式(Factory Method Pattern)。本文要说的简单工厂模式,是工厂方法模式的简化版,不是GoF所写的23个设计模式。理解简单工厂模式,有助于我们理解工厂方法模式和抽象工厂模式。

    简单工厂模式(Simple Factory Pattern)就是定义一个工厂类,它可以通过不同的输入参数返回不同类型的实例;这些实例通常有着共同的父类。简单工厂模式有三种角色。

    • 工厂角色(Factory):工厂角色,即工厂类,负责创建所有产品的实例,是简单工厂模式的核心。

    • 抽象产品角色(Product):是工厂创建的实例对象的父类,封装了产品对象的公有方法;换言之,工厂类创建的对象,都是这个抽象产品类的子类对象。

    • 具体产品角色(Concrete Product):是工厂创建的目标,也是抽象产品类的子类。

    2.简单工厂代码实例

    下面我们将演示一个简单工厂的例子,这是图形工厂,生产各种图形。

    工厂类 ShapeFactory

    /**
     * 工厂类,生产图形的工厂。
     */
    public class ShapeFactory {
    
        // 静态工厂,根据输入类型,获取对应的产品
       public static Shape getShape(String shapeType){
            if(shapeType == null){
                return null;
            }
            if(shapeType.equalsIgnoreCase("CIRCLE")){ // 圆形
                return new Circle();
    
            } else if(shapeType.equalsIgnoreCase("Triangle")){ // 三角形
                return new Triangle();
    
            } else if(shapeType.equalsIgnoreCase("SQUARE")){ // 正方形
                return new Square();
            }
            return null;
        }
    
    }
    

    抽象产品类 Shape

    /**
     * 抽象产品类,图形类
     */
    public interface Shape {
        void draw();
    }
    

    具体产品类

    第一个具体产品,圆形。

    /**
     * 具体产品类,圆形
     */
    public class Circle implements Shape {
        @Override
        public void draw() {
            System.out.println("圆形");
        }
    }
    

    第二个具体产品,正方形。

    /**
     * 具体产品类,正方形
     */
    public class Square implements Shape{
        @Override
        public void draw(){
            System.out.println("正方形");
        }
    }
    

    第三个具体产品,三角形。

    /**
     * 具体产品类,三角形
     */
    public class Triangle implements Shape{
        @Override
        public void draw() {
            System.out.println("三角形");
        }
    }
    

    调用示例

    SimpleMethodMain是一个客户端,只需要向工厂类提出要创建什么类型的Shape就行了,不用关心创建对象的逻辑。如果想要创建其它类型的Shape,只需改变参数即可。

    public class SimpleMethodMain {
        public static void main(String[] args) {
            Shape shape = ShapeFactory.getShape("circle");
            shape.draw();
        }
    }
    

    输出:圆形

    3.总结

    简单工厂模式的优点是使用了工厂类来创建对象,隔离了对象的创建和使用;客户端也不需要知道具体产品的类名,只需要知道参数即可。

    简单工厂模式的缺点是工厂类的角色太重了;同时扩展性不好,静态方法不能被子类继承和覆盖,并且如果需要更多的产品,例如需要更多的图形,就需要修改getShape方法,违法开闭原则。
    (完)

    相关文章

      网友评论

          本文标题:设计模式[2]-简单工厂模式-Simple Factory Pa

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