工厂模式是一种创造型的设计模式,提供更好的方式创造对象。
在工厂模式中,我们可以创建对象而客户端无需关心业务逻辑。
例子
在下面的小节中,我们将会展示如何使用工厂设计模式去创建对象。这些对象是使用工厂模式创建的形状对象。比如圆形,正方形。
首先我们给出形状的接口。
public interface Shape { void draw(); }
然后我们可以创建对象实现这个接口。
下面代码是矩形类代码。
public class Rectangle implements Shape { @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); } }
正方形:
public class Square implements Shape { @Override public void draw() { System.out.println("Inside Square::draw() method."); } }
圆形代码:
public class Circle implements Shape { @Override public void draw() { System.out.println("Inside Circle::draw() method"); } }
工厂设计模式核心在于工厂类。下面代码展示如何通过工厂类创建一系列形状对象。
ShapeFactory类创建形状对象基于字符串置于getShape()获得,譬如字符串"CIRCLE",代表创建一个圆形对象。
public class ShapeFactory { public Shape getShape(String shapeType) { if (shapeType == null) { return null; } if (shapeType.equals("CIRCLE")) { return new Circle(); } if (shapeType.equals("RECTANGLE")) { return new Rectangle(); } if (shapeType.equals("SQUARE")) { return new Square(); } return null; } }
下面是主方法展示如何通过工厂对象创建对象。
public class Main { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); Shape shape1 = shapeFactory.getShape("CIRCLE"); shape1.draw(); Shape shape2 = shapeFactory.getShape("RECTANGLE"); shape2.draw(); Shape shape3 = shapeFactory.getShape("SQUARE"); shape3.draw(); } }
下面试上面代码的输出结果。
Inside Circle::draw() method
Inside Rectangle ::draw() method.
Inside Square::draw() method.