设计模式系列-工厂方法模式-创新互联
回顾下设计模式系列《工厂模式》那片文章,里面描述了如何利用工厂模式来模拟一个换灯泡的场景,该场景中模拟了:普通灯泡、节能灯泡、彩色灯泡。它们统一由一个工厂(工厂类)来创造,我们需要使用哪种灯泡时,只需通知工厂类给我们打造一个相同的灯泡即可,类图如下:
站在用户的角度思考问题,与客户深入沟通,找到舒兰网站设计与舒兰网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站制作、网站建设、企业官网、英文网站、手机端网站、网站推广、域名与空间、网页空间、企业邮箱。业务覆盖舒兰地区。
由上面边的类图可见,所有类型的灯泡都由灯泡工厂来创建,那这个时候,制造灯泡的工厂因为企业扩大了,需要增加产量,那么此时一个工厂肯定是应付不过来了,而且当前一个工厂所造的灯泡种类也多,更加加大了工厂的制造压力,此时,企业扩建的最好办法就是,增加工厂,各自工厂都只专注于一种灯泡的制造。
1.工厂方法模式
首先我们来看看什么是工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法模式类图如下:
Product:定义工厂方法所创建的对象的接口。相当于上边场景中的灯泡抽象。
ConcreteProduct:具体实现Product抽象的具体产品类。相当于上边场景中的具体灯泡。
Creator:声明工厂方法,该方法返回一个Product类型的对象。
ConcreteCreator:重定义工厂方法返回一个ConcreteProduct实例。
可能这会大家看完这个类图会有点模糊,不过没关系,接下来我们利用工厂方法模式来实现我们上边的场景(企业扩大需要建立更多的工厂)。
首先,企业扩大了,需要增加产量建立更多的工厂来创建,为了更好的提高生产效率,每个工厂只专注于生产一种种类的灯泡,利用工厂方法模式设计的类图如下:
边分析边实现代码:
第一步,工厂扩大了,所造的产品还是灯泡,所以我们还是要把灯泡先抽象出来,为何要抽象请参考《工厂模式》这篇文章。
- //灯泡的约定
- public interface IBulb
- {
- //统一的发光接口
- public void Luminescence();
- }
第二步,还是实现目前所有种类的具体灯泡类型。代码如下:
第三步,因为增加了工厂,但是每个工厂都有一个共同的行为那就是制造灯泡,因此为了将来更方便的增加工厂,我们把工厂也抽象,代码如下:
- //灯泡
- public class Bulb : IBulb//实现了灯泡的约定、标准 {
- //发光
- public void Luminescence()
- {
- //灯泡发光的实现
- }
- }
- //节能灯泡
- public class FrugalBulb : IBulb //实现了灯泡的约定、标准
- {
- //节能发光
- public void Luminescence()
- {
- //节能灯泡发光的实现
- }
- }
- //彩色灯泡
- public class ColorBulb : IBulb
- {
- //彩色发光
- public void Luminescence()
- {
- //彩色灯泡发光的实现
- }
- }
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
本文名称:设计模式系列-工厂方法模式-创新互联
当前链接:http://scyanting.com/article/dppjgj.html