设计模式 - 工厂方法模式

本文摘自书籍《设计模式》
此系列文章GitHub地址

创建型 - 工厂方法模式(Factory Method Pattern)

定义

​ 又称为工厂模式、虚拟构造器模式、多态工厂模式,是类创建型模式。工厂父类负责定义创建产品对象的公共接口,而工厂子类负责生成具体的产品对象,目的是将产品类的实例化推迟到子类中完成,即通过子类来确定究竟该实例化哪个产品类。

模式结构

public interface Product {...}

public class ProductA implements Product {...}

public class ProductB implements Product {...}

public interface Factory {
    Product factory();
}

public class AFactory implements Factory {
    public Product factory() {
        return new ProductA();
    }
}

public class BFactory implements Factory {
    public Product factory() {
        return new ProductB();
    }
}
  • Product

    抽象产品,是工厂方法模式创建对象的超类型。也就是产品对象的父类或接口。

  • ProductA

    具体产品,实现了抽象产品接口。

  • Factory

    抽象工厂,声明了工厂方法,用于返回一个产品。抽象工厂时工厂方法模式的核心。

  • AFactory

    具体工厂,实现抽象工厂的方法,返回一个具体的产品类的实例。

优点

  • 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还想客户隐藏了哪种具体产品类将被实例化这一细节,用户只关心所需产品对应的工厂,无需关心创建细节。
  • 基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。它能够使工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部。
  • 加入新产品时,无须修改抽象工厂和抽象产品提供的接口。符合开闭原则。

缺点

  • 添加新产品时,需要添加新的产品类和对应的具体工厂类,系统中类成对增加。
  • 使用抽象层定义,增加了系统的抽象性和理解难度。

使用环境

  • 不关心类的实例化细节,只需要一个对象的情况下,可以使用工厂方法模式。

扩展

  • 抽象工厂可以定义多个工厂方法,这些工厂方法可以对应不同的业务逻辑,构造出满足需求的对象。
  • 产品对象的重复使用,在工厂类中创建一个保存对象的集合,根据客户需求,查询集合返回对象,如果没有再进行创建并存入集合。此时模式转化为享元模式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值