把书读薄 | 《设计模式之美》设计模式与范式(创建型-工厂模式)(下)

简介: 本文是 设计模式与范式:创建型(44-45),工厂模式(Factory Design Pattern) 也是用的比较多的创建型设计模式~ 二手知识加工难免有所纰漏,感兴趣有时间的可自行查阅原文,谢谢。

其中最关键的角色是 → 抽象产品,它的好坏直接决定了抽象工厂和具体功能能否发挥最大作用,应用此模式时应该朝着 分析共性规律 的方向走,仔细分析实现类该如何实现。

以上面说的茶和小吃为例写个抽象工厂模式的例子,先是产品类:


// 抽象产品类①
public abstract class Tea {
    protected abstract String createTea();
}
// 抽象产品类②
public abstract class Snack {
    public abstract String createSnack();
}
// 具体产品类(茶类沿用之前的,小吃类新增两个)
public class HandGrab extends Snack {
    @Override
    public String createSnack() { return "手抓饼"; }
}
public class FishBall extends Snack {
    @Override
    public String createSnack() { return "章鱼小丸子"; }
}


接着是抽象工厂和测试用例:


// 抽象工厂(套餐)
public abstract class SetMenuFactory {
    public abstract Tea createTeaMaker();
    public abstract factory.Snack createSnackMaker();
}
// 具体工厂①
public class ASetMenuFactory extends SetMenuFactory {
    @Override
    public Tea createTeaMaker() { return new TapiocaMilkTea(); }
    @Override
    public Snack createSnackMaker() { return new HandGrab(); }
}
// 具体工厂②
public class BSetMenuFactory extends SetMenuFactory {
    @Override
    public Tea createTeaMaker() { return new TapiocaMilkTea(); }
    @Override
    public Snack createSnackMaker() { return new FishBall(); }
}
// 测试用例
public class SuperTeaStoreTest {
    public static void main(String[] args) {
        SetMenuFactory factoryFirst = new ASetMenuFactory();
        System.out.println("产出一杯:" + factoryFirst.createTeaMaker().createTea() +
                "和一份:" + factoryFirst.createSnackMaker().createSnack());
        SetMenuFactory factorySecond = new BSetMenuFactory();
        System.out.println("产出一杯:" + factorySecond.createTeaMaker().createTea() +
                "和一份:" + factorySecond.createSnackMaker().createSnack());
    }
}


运行结果如下:


网络异常,图片无法展示
|


抽象工厂的优点:符合开闭原则和单一原则、将使用和创建的代码解耦,增加新的产品系列容易。抽象工厂的缺点:代码量和学习成本增加,变更产品结构困难,比如上面的套餐,要添加调味包的产品。


0x2、如何设计实现一个DI框架


在讲依赖反转原则(DIP)的时候就提过这几个名词,再粘贴下以便区分:


网络异常,图片无法展示
|


工厂模式与DI容器的关系


DI容器底层最基本的设计思路就是基于工厂模式的,相当于一个大工厂,负责在程序启动时,根据配置(创建哪些类对象、对象创建需要依赖哪些其他类对象) 事先创建好对象。当程序需要用到某个类对象时,直接从容器中获取即可。正是因为它持有一堆对象,所以这个框架才被称为 "容器"。


DI容器的三个核心功能:


  • 配置解析:通过一种形式让应用告知DI容器要创建哪些对象,一般通过配置文件形式,如Spring的配置文件;


  • 对象创建:DI容器根据配置文件提供的信息创建对象,Java中一般通过反射来动态加载类、创建对象;


  • 生命周期管理:返回新对象还是复用、是否延迟加载、是否配置对象初始化/销毁的钩子等;


课程中写了一个实现简单DI容器的例子,比较简单,只列下流程:最小原型设计提供执行入口配置文件解析核心工厂类设计


Android中常见的依赖注入框架有下面几类:


  • View注入:XUtils、Android Annotations、ButterKnife


  • 参数注入:ARouter


  • 对象注入:koin、Dagger2、Hilt


前两类严格意义上不能算真正的注入,本文内容感觉有些单薄,后面会挑一个DI框架的源码进行分析巩固


相关文章
|
28天前
|
设计模式 Java
【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
41 2
|
5月前
|
设计模式
**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合
【6月更文挑战第23天】**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合。工厂模式专注于单个对象,通过具体工厂创建具体产品,适用于简单对象创建;抽象工厂则关注一系列相关产品,提供创建一族对象的接口,适用于处理多个不兼容产品族。选择模式基于问题域的复杂性,单个产品需求时用工厂模式,多产品族时用抽象工厂模式。
32 5
|
6月前
|
设计模式 Java
Java一分钟之-设计模式:工厂模式与抽象工厂模式
【5月更文挑战第17天】本文探讨了软件工程中的两种创建型设计模式——工厂模式和抽象工厂模式。工厂模式提供了一个创建对象的接口,延迟实例化到子类决定。过度使用或违反单一职责原则可能导致问题。代码示例展示了如何创建形状的工厂。抽象工厂模式则用于创建一系列相关对象,而不指定具体类,但添加新产品可能需修改现有工厂。代码示例展示了创建颜色和形状的工厂。根据需求选择模式,注意灵活性和耦合度。理解并恰当运用这些模式能提升代码质量。
60 2
|
2月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
6月前
|
设计模式 搜索推荐 数据库连接
第二篇 创建型设计模式 - 灵活、解耦的创建机制
第二篇 创建型设计模式 - 灵活、解耦的创建机制
|
3月前
|
设计模式 Java
Java 设计模式之谜:工厂模式与抽象工厂模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第30天】在Java编程中,设计模式为常见问题提供了高效解决方案。工厂模式与抽象工厂模式是常用的对象创建型设计模式,能显著提升代码的灵活性、可维护性和可扩展性。工厂模式通过定义创建对象的接口让子类决定实例化哪个类;而抽象工厂模式则进一步提供了一个创建一系列相关或相互依赖对象的接口,无需指定具体类。这种方式使得系统更易于扩展和维护。
41 1
|
3月前
|
设计模式 算法 开发者
深入理解工厂模式与策略模式:设计模式的灵活应用
深入理解工厂模式与策略模式:设计模式的灵活应用
|
3月前
|
设计模式 uml C语言
设计模式----------工厂模式之简单工厂模式(创建型)
这篇文章详细介绍了简单工厂模式,包括其定义、应用场景、UML类图、通用代码实现、运行结果、实际应用例子,以及如何通过反射机制实现对象创建,从而提高代码的扩展性和维护性。
设计模式----------工厂模式之简单工厂模式(创建型)
|
3月前
|
设计模式 uml
设计模式-------------工厂模式之工厂方法模式(创建型)
工厂方法模式是一种创建型设计模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而实现类的实例化推迟到子类中进行,提高了系统的灵活性和可扩展性。
|
3月前
|
设计模式 Java C语言
设计模式-----------工厂模式之抽象工厂模式(创建型)
抽象工厂模式是一种创建型设计模式,它提供了一个接口用于创建一系列相关或相互依赖的对象,而无需指定具体类,从而增强了程序的可扩展性并确保客户端只使用同一产品族的产品。
设计模式-----------工厂模式之抽象工厂模式(创建型)