设计模式 — 工厂模式
2021/10/17 23:39:54
本文主要是介绍设计模式 — 工厂模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、工厂方法
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
工厂方法的目的是使得创建对象和使用对象是分离的,并且客户端总是引用抽象工厂和抽象产品:
┌─────────────┐ ┌─────────────┐ │ Product │ │ Factory │ └─────────────┘ └─────────────┘ ▲ ▲ │ │ ┌─────────────┐ ┌─────────────┐ │ ProductImpl │<─ ─ ─│ FactoryImpl │ └─────────────┘ └─────────────┘
工厂接口:
public interface NumberFactory { Number parse(String s); }
工厂实现类:
public class NumberFactoryImpl implements NumberFactory { public Number parse(String s) { return new BigDecimal(s); } }
产品接口是Number
,NumberFactoryImpl
返回的实际产品是BigDecimal
客户端如何创建NumberFactoryImpl
呢?通常我们会在接口Factory
中定义一个静态方法getFactory()
来返回真正的子类:
public interface NumberFactory { // 创建方法: Number parse(String s); // 获取工厂实例: static NumberFactory getFactory() { return impl; } //获取实现类 static NumberFactory impl = new NumberFactoryImpl(); }
在客户端中,我们只需要和工厂接口NumberFactory
以及抽象产品Number
打交道:
NumberFactory factory = NumberFactory.getFactory(); Number result = factory.parse("123.456");
调用方可以完全忽略真正的工厂NumberFactoryImpl
和实际的产品BigDecimal
,这样做的好处是允许创建产品的代码独立地变换,而不会影响到调用方。
2、静态工厂方法(Static Factory Method)。
静态工厂方法广泛地应用在Java标准库中
Integer n = Integer.valueOf(100); #Integer n = new Integer(100);
Integer
既是产品又是静态工厂。它提供了静态方法valueOf()
来创建Integer
。那么这种方式和直接写new Integer(100)
有何区别呢?我们观察valueOf()
方法:
public final class Integer { public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } ... }
valueOf()
内部可能会使用new
创建一个新的Integer
实例,但也可能直接返回一个缓存的Integer
实例。对于调用方来说,没必要知道Integer
创建的细节。
如果调用方直接使用Integer n = new Integer(100)
,那么就失去了使用缓存优化的可能性。
工厂方法可以隐藏创建产品的细节,且不一定每次都会真正创建产品,完全可以返回缓存的产品,从而提升速度并减少内存消耗。
3、抽象工厂方法
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂模式和工厂方法不太一样,它要解决的问题比较复杂,不但工厂是抽象的,产品是抽象的,而且有多个产品需要创建,因此,这个抽象工厂会对应到多个实际工厂,每个实际工厂负责创建多个实际产品:
┌────────┐ ─ >│ProductA│ ┌────────┐ ┌─────────┐ │ └────────┘ │ Client │─ ─>│ Factory │─ ─ └────────┘ └─────────┘ │ ┌────────┐ ▲ ─ >│ProductB│ ┌───────┴───────┐ └────────┘ │ │ ┌─────────┐ ┌─────────┐ │Factory1 │ │Factory2 │ └─────────┘ └─────────┘ │ ┌─────────┐ │ ┌─────────┐ ─ >│ProductA1│ ─ >│ProductA2│ │ └─────────┘ │ └─────────┘ ┌─────────┐ ┌─────────┐ └ ─>│ProductB1│ └ ─>│ProductB2│ └─────────┘ └─────────┘
这篇关于设计模式 — 工厂模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-06小米11i印度快充版ROM合集:极致体验,超越期待
- 2024-10-06【ROM下载】小米11i 5G 印度版系统, 疾速跃迁,定义新速度
- 2024-10-06【ROM下载】小米 11 青春活力版,青春无极限,活力全开
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求