JAVA设计模式——简单工厂

  • 格式:pdf
  • 大小:58.07 KB
  • 文档页数:2

JAVA设计模式——简单⼯⼚

⼯⼚模式分为三种:简单⼯⼚模式,⼯⼚⽅法模式,抽象⼯⼚模式。我看有的书上和有的⽂章⾥是分为两种,没有简单⼯⼚。

⼯⼚模式主要的作⽤是:⼀个对象在实例化的时候可以选择多个类,在实例化的时候根据⼀些业务规则来选择实例化哪个类。

1.先定义⼀个图形接⼝,有⼀个画⽅法

public interface Shape {

void draw();

}

2.再创建两个实现接⼝的实体类

public class Rectangle implements Shape {

@Override

public void draw() {

System.out.println("画长⽅形。");

}

}

public class Square implements Shape {

@Override

public void draw() {

System.out.println("画正⽅形。");

}

}

3.创建⼀个⼯⼚,⽣成基于给定信息的实体类的对象

public class ShapeFactory {

//使⽤ createShape ⽅法获取形状类型的对象

public Shape createShape(String shapeType) {

if (shapeType == null) {

return null;

}

if (shapeType.equalsIgnoreCase("RECTANGLE")) {

return new Rectangle();

} else if (shapeType.equalsIgnoreCase("SQUARE")) {

return new Square();

}

return null;

}

}

4.使⽤该⼯⼚,通过传递类型信息来获取实体类的对象。

public class SimpleFactoryPatternDemo {

public static void main(String[] args) {

ShapeFactory shapeFactory = new ShapeFactory();

//获取 Rectangle 的对象,并调⽤它的 draw ⽅法

Shape shape1 = shapeFactory.createShape("RECTANGLE");

//调⽤ Rectangle 的 draw ⽅法

shape1.draw();

//获取 Square 的对象,并调⽤它的 draw ⽅法

Shape shape2 = shapeFactory.createShape("SQUARE");

//调⽤ Square 的 draw ⽅法

shape2.draw();

}

}

输出:

画长⽅形。

画正⽅形。

这⾥Shape接⼝声明的变量既可以⽤Rectangle实例化,也可以⽤Square实例化。ShapeFactory就是⼀个⼯⼚,去决定怎么实例化。

这个模式的缺点是对“开-闭”原则的⽀持不够。如果要新加⼀个“产品”,⽐如新加⼀个实现Shape的圆形类,要在⼯⼚⾥使⽤这个圆形类的

话,需要去修改ShapeFactory⼯⼚的代码。

那么应该怎么解决这个缺点,下篇⼯⼚⽅式模式就是解决这个问题。