说明
本文只对策略枚举可以使用的场景进行说明,不做其他介绍。提供额外的实现思路。
工厂模式
普通的工厂模式,都有一个基本的抽象类或接口,然后具体的实现类。并且由一个工厂类来进行返回实现类。
参考:工厂模式
改造
这里对参考的代码进行改造:
- Shape.java、Rectangle.java、Square.java、Circle.java,这四个类不变。
- 在ShapeFactory.java类中,存在一个类型:“shapeType”。这个就能够使用枚举进行替换。所以我们就新建一个枚举ShapeTypeEnum.java。如下:
- 删除将ShapeFactory.java中的getShape方法,使用ShapeTypeEnum.java的valueOf和getShape方法代替。就可以实现工厂模式到策略工厂的转换。
public enum ShapeTypeEnum {
CIRCLE(new Circle()),
RECTANGLE(new Rectangle()),
SQUARE(new Square()),
;
private Shape shape;
ShapeTypeEnum(Shape shape) {
this.shape = shape;
}
public Shape getShape() {
return shape;
}
}
- 在使用的地方,代码修改为:
public class FactoryPatternDemo {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
//获取 Circle 的对象,并调用它的 draw 方法
Shape shape1 = shapeFactory.getShape("CIRCLE");
//调用 Circle 的 draw 方法
shape1.draw();
//获取 Rectangle 的对象,并调用它的 draw 方法
Shape shape2 = shapeFactory.getShape("RECTANGLE");
//调用 Rectangle 的 draw 方法
shape2.draw();
//获取 Square 的对象,并调用它的 draw 方法
Shape shape3 = shapeFactory.getShape("SQUARE");
//调用 Square 的 draw 方法
shape3.draw()