我们今天重新演绎一下抽象工厂类,工厂模式通常有简单工厂模式和抽象工厂模式。工厂模式是我第一个接触的设计模式。我清晰地记得,是我学习 javascript。我用工厂模式来实现输入类型来创建一个表单组件,根据输入类型可能返回是单选、多选或文本框。
所以工厂模式基本都是根据输入来产出输出。抽象工厂类,我们不但抽象产品而且连工厂也是抽象的,一切都是根据用户需要,我们来实现工厂来生产产品。自己现在对工厂模式理解深刻点了。我还是通过 code 来说吧。这里有个接口定义了两个方法,这两个方法分别创建两种产品。
interface(接口)Bakery 又两个需要实现的方法,这两个方法分别用于创建,制作 Pastry 和 Cake (这两个也是抽象,用接口来描述)。
那么 Bakery 就是我们的抽象工厂,我们需要实现抽象工厂类的两个生产的两种不同产品的方法。我们具体看一下 bakePastry 这个方法(工厂方法)输入 Topping 然后输出是 Pastry 的具体实现(产品)
怎么解释呢?我们这里又两个接口(可以理解对产品功能的描述)我们根据产品的描述来生产产品,在抽象工厂模式,产品具体的创建符合创建的接口。
我们看一看,函数式接口这个接口不同于其他接口,接口定一个两个泛型 T R,然后实现一个 apply 的方法,这个方法是输入 T 输出 R。这个不就是工厂模式的核心吗。所以我们无需具体定一个创建产品的工厂接口。函数接口是天生的抽象工厂模式。
那么我们生产 Pastry 的具体工厂方法就可以直接实现函数接口<Topping, Pastry>.
在最开始我们已经提及工厂类是输入- >输入的关系。
我们只要实现 Function<Topping,Pastry> 这个接口我们实现一个创建 Pastry 的一种 DanishPastry 的方法(工厂),然后我们根据之前学习对我们 code 一步一步简化。
我们看一看通过函数接口我们可以省去这两个实体工厂的实现。
网友评论