20190121——不羡神仙 Java工厂设计模式
工厂模式是Java中最常用的设计模式之一,这种类型的设计模式属于创建模式,因为此模式提供了创建对象的最佳方法之一
在工厂模式中,我们没有创建逻辑暴露给客户端创建对象,并使用一个普通的接口引用新创建的对象。
实现方法
我们将创建一个Shape接口和实现Shape接口的具体类。一个工厂类ShapeFactory会在下一步定义。
FactoryPatternDemo这是一个演示类,将使用ShapeFactory来获取一个Shape对象,它会将信息(CIRCLE/RECTANGLE/SQUARE)传递给ShapeFactory以获取所需的类型。
创建一个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.具体产品角色
简单工厂模式所创建的具体的实例对象
上面的UML图为例,表示的是一个用简单工厂方法模式实现的计算器程序。
其中Operator是一个抽象类,或者是接口,其中包含属性numberA,numberB,还有一个方法getResult()用于返回计算的结果,他是抽象角色(Product)
下面的AddOperator、SubOperator、MulOperator、DivOperator是Operator的子类,分别代表加减乘除四种运算,他们的角色是具体产品角色(Concrete Product)
OperatorFactory是工厂类,其中的createOperator()方法用于创建计算器对象