赞
踩
工厂模式属于创建型模式,也被称为多态工厂模式,它在创建对象时提供了一种封装机制,将实际创建对象的代码与使用代码分离,有子类决定要实例化的产品是哪一个,把产品的实例化推迟到子类。

创建一个 Shape 接口和实现 Shape 接口的实体类。下一步是定义工厂类 ShapeFactory。
FactoryPatternDemo 类使用 ShapeFactory 来获取 Shape 对象。它将向 ShapeFactory 传递信息(CIRCLE / RECTANGLE / SQUARE),以便获取它所需对象的类型。
抽象产品
- 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.");
- }
- }

抽象工厂
- public interface Factory {
-
- public Shape getShape(String shapeType);
- }
具体工厂
- public class ShapeFactory implements Factory {
-
- //使用 getShape 方法获取形状类型的对象
- @Override
- public Shape getShape(String shapeType){
- if(shapeType == null){
- return null;
- }
- if(shapeType.equalsIgnoreCase("CIRCLE")){
- return new Circle();
- } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
- return new Rectangle();
- } else if(shapeType.equalsIgnoreCase("SQUARE")){
- return new Square();
- }
- return null;
- }
- }

使用该工厂,通过传递类型信息来获取实体类的对象
- 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();
- }
- }

运行结果
- Inside Circle::draw() method.
- Inside Rectangle::draw() method.
- Inside Square::draw() method.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。