工厂方法模式

工厂方法模式:定义一个建立对象的接口,但让实现这个接口的类来决定实例化哪一个类,也就是说工厂方法模式让实例化推迟到子类ide

应用场景:code

  • 客户只知道建立产品的工厂名,而不知道具体的产品名
  • 建立对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供建立产品的接口。
  • 客户不关心建立产品的细节,只关心产品的品牌

工厂方法模式的组件:对象

  • Factory(抽象工厂):提供了建立产品的接口,调用者经过它访问具体工厂的工厂方法来建立产品。
  • ConcreteFactory(具体工厂):主要是实现抽象工厂中的抽象方法,完成具体产品的建立
  • Product(抽象产品):定义了产品的规范,描述了产品的主要特性和功能
  • ConcreteProduct(具体产品):实现了抽象产品角色所定义的接口,由具体工厂来建立,它同具体工厂之间一一对应

工厂方法模式组件示例:
抽象产品:接口

public interface Shape {
    void shapeDesc();
}

具体产品:产品

public class Circle implements Shape {
    @Override
    public void shapeDesc() {
        System.out.println("这是一个圆形");
    }
}
public class Rectangle implements Shape {
    @Override
    public void shapeDesc() {
        System.out.println("这是一个矩形");
    }
}
public class Square implements Shape {
    @Override
    public void shapeDesc() {
        System.out.println("这是一个正方形");
    }
}

抽象工厂:class

public interface Factory {
    Shape createShape();
}

具体工厂:方法

public class CircleFactory implements Factory {
    @Override
    public Shape createShape() {
        return new Circle();
    }
}
public class RectangleFactory implements Factory {
    @Override
    public Shape createShape() {
        return new Rectangle();
    }
}
public class SquareFactory implements Factory {
    @Override
    public Shape createShape() {
        return new Square();
    }
}

工厂方法模式总结:im

  • 新增一种产品时,只须要增长相应的具体产品类和相应的工厂子类便可,更符合开-闭原则
  • 每一个具体工厂类只负责建立对应的产品,更符合单一职责原则
  • 若产品过多时,会致使系统类的个数将成对增长,在必定程度上增长了系统的复杂度
相关文章
相关标签/搜索