简介
工厂模式(Factory Pattern)是 Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。将创建对象的过程延迟到子类,分为简单工厂,工厂方法,抽象工厂三种模式。
简单工厂构成:抽象产品接口,具体产品类,工厂类
简单工厂类图
代码
/** * 简单工厂-抽象产品 * @author: 张彬 * @date: 2018年3月22日 下午2:44:27 * @version: V1.0 * @review: 张彬/2018年3月22日 下午2:44:27 */ public interface Shape { public void draw(); }
/** * 简单工厂-具体产品 * @author: 张彬 * @date: 2018年3月22日 下午3:07:48 * @version: V1.0 * @review: 张彬/2018年3月22日 下午3:07:48 */ public class Circle implements Shape { @Override public void draw() { System.out.println("in Circle::draw() method."); } }
/** * 简单工厂-具体产品 * @author: 张彬 * @date: 2018年3月22日 下午2:46:10 * @version: V1.0 * @review: 张彬/2018年3月22日 下午2:46:10 */ public class Rectangle implements Shape { @Override public void draw() { System.out.println("in Rectangle::draw() method."); } }
/** * 简单工厂-具体产品 * @author: 张彬 * @date: 2018年3月22日 下午2:47:46 * @version: V1.0 * @review: 张彬/2018年3月22日 下午2:47:46 */ public class Square implements Shape { @Override public void draw() { System.out.println("in Square::draw() method."); } }
/** * 简单工厂-工厂 * @author: 张彬 * @date: 2018年3月22日 下午2:48:22 * @version: V1.0 * @review: 张彬/2018年3月22日 下午2:48:22 */ public class ShapeFactory { public Shape getShape(String shapeType){ switch (shapeType){ case ShapeType.RECTANGLE: return new Rectangle(); case ShapeType.SQUARE: return new Square(); default: return null; } } }
/** * 常量 * @author: 张彬 * @date: 2018年3月22日 下午2:50:03 * @version: V1.0 * @review: 张彬/2018年3月22日 下午2:50:03 */ public class ShapeType{ public static final String RECTANGLE = "RECTANGLE"; public static final String SQUARE = "SQUARE"; }
/** * 简单工厂-测试 * @author: 张彬 * @date: 2018年3月22日 下午3:04:34 * @version: V1.0 * @review: 张彬/2018年3月22日 下午3:04:34 */ public class SimpleFactoryDemo { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); //获取 Rectangle 的对象,并调用它的 draw 方法 Shape shape2 = shapeFactory.getShape(ShapeType.RECTANGLE); //调用 Rectangle 的 draw 方法 shape2.draw(); //获取 Square 的对象,并调用它的 draw 方法 Shape shape3 = shapeFactory.getShape(ShapeType.SQUARE); //调用 Square 的 draw 方法 shape3.draw(); } }
输出结果:
in Rectangle::draw() method. in Square::draw() method.