20190121——不羡神仙 Java工厂设计模式

工厂模式是Java中最常用的设计模式之一,这种类型的设计模式属于创建模式,因为此模式提供了创建对象的最佳方法之一
在工厂模式中,我们没有创建逻辑暴露给客户端创建对象,并使用一个普通的接口引用新创建的对象。

实现方法
我们将创建一个Shape接口和实现Shape接口的具体类。一个工厂类ShapeFactory会在下一步定义。
FactoryPatternDemo这是一个演示类,将使用ShapeFactory来获取一个Shape对象,它会将信息(CIRCLE/RECTANGLE/SQUARE)传递给ShapeFactory以获取所需的类型。
20190121——不羡神仙 Java工厂设计模式
创建一个Shape的接口

package 工厂设计模式;

public interface Shape {
    void draw();
}

实现三个接口
Circle

package 工厂设计模式;

public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Circle::draw() method");
    }
}

Retangle

package 工厂设计模式;

public class Retangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Retangle::draw() method");
    }
}

Square

package 工厂设计模式;

public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Square::draw() method");
    }
}

ShapeFactory 工厂

package 工厂设计模式;

public class ShapeFactory {
    public Shape getShape(String shapeType){
        if(shapeType==null){
            return null;
        }
        if(shapeType.equalsIgnoreCase("CIRCLE")){
            return new Circle();
        }else if(shapeType.equalsIgnoreCase("RETANGLE")){
            return new Retangle();
        }else if(shapeType.equalsIgnoreCase("SQUARE")){
            return new Square();
        }
        return null;
    }
}

Demo

package 工厂设计模式;

public class FactoryPatternDemo {
    public static void main(String[] args) {
        ShapeFactory shapeFactory=new ShapeFactory();
        Shape shape1=shapeFactory.getShape("CIRCLE");
        shape1.draw();
        Shape shape2=shapeFactory.getShape("RETANGLE");
        shape2.draw();
        Shape shape3=shapeFactory.getShape("SQUARE");
        shape3.draw();
    }
}

创建型的设计模式中的工厂模式:可细分为三种:简单工厂模式,工厂方法模式,抽象工厂模式。

简单工厂模式,属于类的创建方式,又叫静态工厂方法模式,通过专门定义一个工厂类负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂模式包含三种角色:
1.工厂角色(Creator)
这是简单工厂模式的核心,他负责来实现创建所有实例的内部逻辑,工厂类可以被外界类直接调用,创建所需的产品对象
2.抽象角色(Product)
这是简单工厂模式所创建所有的对象的父类,它负责描述所有实例所有的公共接口,该类可以是接口,也可以是抽象类。
3.具体产品角色
简单工厂模式所创建的具体的实例对象
20190121——不羡神仙 Java工厂设计模式
上面的UML图为例,表示的是一个用简单工厂方法模式实现的计算器程序。
其中Operator是一个抽象类,或者是接口,其中包含属性numberA,numberB,还有一个方法getResult()用于返回计算的结果,他是抽象角色(Product)
下面的AddOperator、SubOperator、MulOperator、DivOperator是Operator的子类,分别代表加减乘除四种运算,他们的角色是具体产品角色(Concrete Product)
OperatorFactory是工厂类,其中的createOperator()方法用于创建计算器对象