华为全家桶、苹果全家桶 <!-- more --> 工厂模式(factory Method)的本质是什么?为什么引入工厂模式?- 大宽宽的回答 - 知乎 https://www.zhihu.com/question/42975862/answer/1239305317 ## 关键词 我来整理一下工厂模式相关的关键词和概念: | 分类 | 关键词 | 说明 | | ---- | ---------------- | --------------- | | 工厂类型 | Simple Factory | 简单工厂,单个工厂类创建对象 | | | Factory Method | 工厂方法,定义创建对象的接口 | | | Abstract Factory | 抽象工厂,创建一组相关对象 | | | Static Factory | 静态工厂,使用静态方法创建对象 | | | Dynamic Factory | 动态工厂,运行时决定创建的对象 | | 核心角色 | Creator | 创建者,声明工厂方法的接口 | | | ConcreteCreator | 具体创建者,实现工厂方法 | | | Product | 产品,工厂创建的对象接口 | | | ConcreteProduct | 具体产品,实际被创建的对象 | | | Factory | 工厂类,负责创建对象的类 | | 相关方法 | CreateInstance | 创建实例的方法 | | | GetInstance | 获取实例的方法 | | | NewInstance | 新建实例的方法 | | | Register | 注册可创建的产品类型 | | | Build | 构建对象的方法 | 您对工厂模式中的哪些具体实现或应用场景比较感兴趣?我可以详细解释其中的任何概念。 ## 场景 1. 要 new 出一个对象,需要经历好多步骤,不封装的话得写一大坨代码 ```java public class RedisFactory { private static final Logger LOGGER = LoggerFactory.getLogger(RedisFactory.class); public static RedisAsyncClient create(String namespace, String cipher) { LOGGER.info("begin to init redis client, ns={}", namespace); RedisConfig.Builder configBuilder = RedisConfig .newBuilder(); configBuilder.withCodec(new CommonRedisCoder()); configBuilder.withDiscardPolicy(RedisConfig.DiscardPolicy.RETRY_ON_RECONNECTED); // 连接是异步的, 在连上之前cmd可以入队列 configBuilder.withStartupRetryTimes(3); configBuilder.withReconnectCmdQueueSize(50000); RedisClientBuilder builder = RedisClientBuilder.create(namespace, cipher); builder.setSessionConfig(configBuilder.build()); try { return builder.buildAsync(); } catch (RedisException e) { throw Throwables.propagate(e); } } } ``` ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F05%2F09%2F20-32-56-91714027d79dc1b8bd8b14baac26cc80-20240509203255-e4637d.png) 1. 有一批类似的类需要实例化,所谓的类似的类,又分一✖️n 和 n✖️n 两种情况 ## 简单工厂和抽象工厂的区别 本质的区别是类的复杂程度: 如果是普通的 1-n 的树状结构,比如一个抽象类是食物,其子类有苹果、牛奶等等,则抽象食物与具体食物名称之间构成了一个产品等级结构。食物是抽象的父类,而具体的食物名称是其子类。普通的工厂方法模式只把产品抽象了(人 - 男人、女人),工厂是具体的,要男人造男人,要女人造女人。 如果是存在两个维度的表格或者矩阵型结构,也就是所谓的多产品族,即由同一个工厂生产的,位于不同产品等级结构中的一组产品,比如苹果全家桶。在抽象工厂中,产品是抽象的(电子设备 - 平板、电脑),工厂也是抽象的(电子设备厂 - 华为、苹果)