应用实例: 1、您需要文具(圆,长方形,正方形),可以直接从文具包里拿,而不用去管这文具是怎么做出来的,以及这个文具的具体材料。
使用场景:当一些类创建时过于复杂,但又被经常调用时。
步骤 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("正方形"); } } /** * 圆 */ public class Circle implements Shape { @Override public void draw() { System.out.println("圆"); } }
步骤 3
创建一个工厂,生成基于给定信息的实体类的对象。
/** * 获取形状的工厂 */ public class ShapeFactory { /** * * 使用 getShape 方法获取形状类型的对象 * @param shapeType * @return 返回的值是他们的父类。(向上造型) */ public Shape getShape(String shapeType) { //如果参数是null,返回null if (shapeType == null) { return null; } //如果参数是CIRCLE,就返回Circle实例(忽略大小写) if (shapeType.equalsIgnoreCase("CIRCLE")) { return new Circle(); } //如果参数是RECTANGLE,就返回Rectangle实例(忽略大小写) if (shapeType.equalsIgnoreCase("RECTANGLE")) { return new Rectangle(); } //如果参数是SQUARE,就返回Square实例(忽略大小写) if (shapeType.equalsIgnoreCase("SQUARE")) { return new Square(); } //都不满足返回null return null; } }
测试
public class FactoryPatternDemo { public static void main(String[] args) { //创建工厂 ShapeFactory shapeFactory = new ShapeFactory(); //获取 Circle 的对象,并调用它的 draw 方法 Shape shape1 = shapeFactory.getShape("CIRCLE"); shape1.draw(); //获取 Rectangle 的对象,并调用它的 draw 方法 Shape shape2 = shapeFactory.getShape("RECTANGLE"); shape2.draw(); //获取 Square 的对象,并调用它的 draw 方法 Shape shape3 = shapeFactory.getShape("SQUARE"); shape3.draw(); } }