创建者模式之工厂模式
工厂模式目的在于:原本对具体对象的耦合转变为对工厂的耦合;使用工厂来获取具体对象。
简单工厂模式
简单工厂中的角色:
- 抽象产品:定义产品规范,描述产品的主要特性和功能
- 具体产品:实现或继承抽象产品的子类
- 具体工厂:提供创建产品的方法,调用者通过该方法获取产品对象
简单工厂就是将具体对象的创建封装在工厂中,根据参数返回创建的对象。
优点: 创建具体产品对象过程,与业务逻辑分开。
缺点: 增加新产品还需要更改工厂代码。
静态工厂
与简单工厂相比,就是将工厂中的创建方法转变为静态的,可直接通过类名进行调用,无需再创建工厂的对象。
工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪个产品对象;工厂方法将一个产品类的实例化延迟到其工厂的子类中实现。
工厂方法中的角色:
- 抽象工厂:提供了创建产品的接口,调用者通过它访问具体工厂来创建产品
- 具体工厂:提供创建产品的方法,调用者通过该方法获取产品对象
- 抽象产品:定义产品规范,描述产品的主要特性和功能
- 具体产品:实现或继承抽象产品的子类
如要创建一杯咖啡的流程:
咖啡店 → 咖啡工厂接口 → 具体咖啡工厂 → 生产咖啡
由对工厂的耦合,转变对接口的耦合,在有多态进行创建想要的对象。
优点:与简单工厂/静态工厂相比,增加新产品无需更改工厂代码,满足开闭原则。
抽象工厂模式
- 与工厂方法对比,抽象工厂模式可生产多个等级的产品。
- 抽象工厂中规定了创建产品的抽象方法。
- 生产的是同一产品族的产品对象
抽象工厂中的角色:
- 抽象工厂:提供了创建产品的接口,它包含多个创建产品的方法,可以创建多个不同等级的产品。
- 具体工厂:实现抽象工厂中的抽象方法完成具体产品的创建。
- 抽象产品:定义产品规范,描述产品的主要特性和功能。
- 具体产品:实现或继承抽象产品的子类。
如果要加一个产品族的话,只需要再加一个对应的工厂类即可,不需要修改其他类;而如果要在产品族中添加一个产品的话,就需要更改所有的类。
扩展
采用简单工厂+配置文件的方式进行创建实体。
扫描二维码关注公众号,回复:
13376179 查看本文章