设计模式-抽象工厂模式、简单工厂模式、工厂方法模式

                             

                       

                  

 

工厂方法模式举个例子来说,加减乘除4个具体运算类(ConcreteProduct)其实就是依赖于抽象运算类(Product),而返回加减乘除具体运算类,又是由依赖于抽象运算工厂类(Creator)的加减乘除4个工厂类(ConcreteProduct)一对一返回。

抽象工厂模式,假设车床生产两种不同的产品A跟产品B,那么车床可以当成一个工厂类,如此,当有车床A跟车床B都可以生产产品A跟产品B,那么车床A跟车床B操作方法不一样。使用车床A生产产品A(Product1 A)跟产品B(Product1 B)依赖于(AbstractProduct1),使用车床B生产产品A(Product2 A )跟产品B(Product2 B)依赖于(AbstractProduct2),而车床A(ConcreteFactoryA)跟车床B(ConcreteFactoryB)依赖于抽象车床(AbstractFactory),并有车床A跟B返回对应的产品A跟B的操作方法。其实也就是在工厂方法的基础上多了多个工厂,并这些工厂依赖于抽象工厂。如此当加产品C时,那么需要多出两个车床各自生成产品C的类,并且为抽象车床、车床A、车床B添加生成产品C的方法,又需要进行添加这些类,又需要修改,做法会显得很丑陋。

如此可以使用简单工厂模式+抽象工厂模式进行简化

 

使用简单工厂通过switch进行判断是使用车床A还是车床B进行生产,返回生产产品A跟产品B的方法,而客户端只需要调用简单工厂的创建产品方法,当需要更换车床时,只需要进入简单工厂设置switch参数即可,这样客户端的代码时可以不变动的。

这样就省去了抽象工厂模式上述繁多的类,还使得客户端代码可以省去改动。但是这样还是不完善的,当增加车床时,还是需要进入简单工厂中的switch添加case,没有做到“开放-封闭”。

这个时候可以使用反射+配置文件进行配合简单工厂中switch需要的参数,动态调用方法即可,这样只需要修改配置文件,代码完全不需要修改。代码参考:https://www.cnblogs.com/yulinfeng/p/5847733.html 

总结自:《大话设计模式》抽象工厂模式

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值