简介
工厂方法:抽象产品,具体产品,抽象工厂,具体工厂。在简单工厂的基础上,多出一个抽象工厂,每个具体工厂只能生产一种产品
类图
代码
/** * 简单工厂-抽象产品 * @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日 下午4:15:20 * @version: V1.0 * @review: 张彬/2018年3月22日 下午4:15:20 */ public interface ShapeFactory { public Shape getShape(); }
/** * 工厂方法-具体工厂 (只敲这一个) * @author: 张彬 * @date: 2018年3月22日 下午3:22:20 * @version: V1.0 * @review: 张彬/2018年3月22日 下午3:22:20 */ public class CircleFactory implements ShapeFactory { @Override public Shape getShape() { return new Circle(); } }
/** * 测试 * @author: 张彬 * @date: 2018年3月22日 下午3:04:34 * @version: V1.0 * @review: 张彬/2018年3月22日 下午3:04:34 */ public class FactoryMethodDemo { public static void main(String[] args) { ShapeFactory shapeFactory = new CircleFactory(); Shape circle = shapeFactory.getShape(); circle.draw(); } }
输出结果:
in Circle::draw() method.