首页 工厂设计模式
文章
取消

工厂设计模式

工厂模式概念

定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

应用场景

  1. 日志记录器:用户可以选择日志存储到什么地方
  2. 数据库访问:用户可以选择数据库
  3. 设计一个连接服务器的框架

    实现案例

  • 创建一个接口:
    1
    2
    3
    
    public interface Shape {
     void draw();
    }
    
  • 创建接口的实现
    1
    2
    3
    4
    5
    6
    7
    
    public class Rectangle implements Shape {
    
     @Override
     public void draw() {
        System.out.println("Rectangle method.");
     }
    }
    
    1
    2
    3
    4
    5
    6
    7
    
    public class Square implements Shape {
    
     @Override
     public void draw() {
        System.out.println("Square method.");
     }
    }
    
    1
    2
    3
    4
    5
    6
    7
    
    public class Circle implements Shape {
    
     @Override
     public void draw() {
        System.out.println("Circle method.");
     }
    }
    
  • 创建一个工厂,生成基于给定信息的实体类的对象
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    public class ShapeFactory {
    
     //使用 getShape 方法获取形状类型的对象
     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;
     }
    }
    
  • 调用该工厂,通过传递类型信息来获取实现。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    public class FactoryDemo {
    
     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();
     }
    }
    
本文由作者按照 CC BY 4.0 进行授权
载入天数...载入时分秒...