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

2017-02-21  本文已影响43人  郭寻抚

1. 简单工厂模式简介

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

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

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方法,违法开闭原则。
(完)

上一篇下一篇

猜你喜欢

热点阅读