设计相关3-工厂相关模式

在设计模式中,工厂相关的模式有三种:简单工厂、工厂方法、抽象工厂。
使用场景:
1.在编码时不能预见需要创建哪种产品类的实例。
2.客户端不需要关心产品类的实例化过程。

1. 简单工厂

组成:
一个抽象的产品IProduct(接口或抽象类);
一个非抽象工厂类Factory;

类图:
这里写图片描述

//客户端示例:
Factory factory = new Factory();
Iproduct pA = factory.createProduct("A");
pA.doSomething();
Iproduct pB = factory.createProduct("B");
pB.doSomething();

场景举例:
麦当劳成立初期,他们的产品只有汉堡,汉堡有“奥尔良鸡腿堡”、“双层牛肉煲”等类型。客户要什么,只需要工厂根据汉堡类型创建相应的汉堡就行了。
另外需要注意的是:当具体的产品种类比较多时,为了防止类爆炸,在工厂方法模式中可以使用简单工厂模式,类似的产品(兄弟节点的产品)可以用简单工厂模式创建。简单工厂可以理解为是工厂方法的一种特殊情况。

缺点:
如果新增一类产品,不仅需要扩展产品的具体类,还要修改工厂的创建方法,使工厂能够创建新增的汉堡。这就违反了“开闭原则”。

2. 工厂方法

组成:
一个抽象的产品IProduct(接口或抽象类);
一个抽象工厂类IFactory(接口或抽象类);
多个具体产品实现类;
多个具体工厂实现类,并且一个具体工厂类负责创建一个产品;

类图:
这里写图片描述

客户端示例:
IFactory factoryA = new FactoryA();
Iproduct pA = factoryA.createProduct();
pA.doSomething();


IFactory factoryB = new FactoryB();
Iproduct pB = factoryB.createProduct();
pB.doSomething();

场景举例:
随着用户需求的增加,会新增汉堡类型。扩展相应的产品和工厂实现就行了。

3. 抽象工厂

组成:
多种抽象的产品IProduct(接口或抽象类);
一个抽象工厂类IFactory(接口或抽象类);
多个具体产品实现类(不同种类的产品之间总是以某种品牌的方式成组出现);
多个具体工厂实现类,并且一个具体工厂类负责为某种品牌创建具体的产品组;

类图:
这里写图片描述

客户端示例:
IFactory factory4XiaoMi = new FactoryForXiaoMi();
Iproduct pA = factory4XiaoMi.createProductA();
Iproduct pB = factory4XiaoMi.createProductB();
Iproduct pC = factory4XiaoMi.createProductC();



IFactory factory4MeiZu = new FactoryForMeiZu();
Iproduct pA = factory4MeiZu.createProductA();
Iproduct pB = factory4MeiZu.createProductB();
Iproduct pC = factory4MeiZu.createProductC();

场景举例:
手机组件由屏幕、机壳、cpu等不同种类的产品组成;
不同的手机生产商需要的手机组件不同;比如华为、小米、魅族生产手机时,用的手机组件是不同的;
这时,由不同的工厂实现类负责为不同的手机生产商创建手机组件就行了;

总结:
曾经一名老师说过,设计模式只是很好的给我们提供思路和解决方案,我们自己在设计时,不必非得严格按照类图来,要灵活设计,理解设计模式的精髓才是重要的。我很赞同这一点!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值