《HeadFirst设计模式》第四章-3.抽象工厂模式

1.声明设计模式中的设计思想、图片和部分代码参考自《Head First设计模式》,作者Eric Freeman & Elisabeth Freeman & Kathy Siezza & Bert Bates。在这里我只是对这本书进行学习阅读,并向大家分享一些心得体会。2.依赖具体类的缺陷由第2篇,我们知道了,工厂方法模式可以较好的解决对象依赖的问题,使程序...
摘要由CSDN通过智能技术生成

1.声明

设计模式中的设计思想、图片和部分代码参考自《Head First设计模式》作者Eric Freeman & Elisabeth Freeman & Kathy Siezza & Bert Bates

在这里我只是对这本书进行学习阅读,并向大家分享一些心得体会。

2.依赖具体类的缺陷

由第2篇,我们知道了,工厂方法模式可以较好的解决对象依赖的问题,使程序更易维护,但是还有另外一种工厂模式,也可以帮助我们从依赖中解脱出来,它就是抽象工厂模式。

现在我们忘掉抽象工厂模式,来看一下抽象工厂模式是如何解决这个问题的,它和工厂方法模式有什么异同。

2.1一个饱受依赖困扰的案例

下面是一个比萨店,首先会创建比萨,并且会执行订单流程:

关系图:

可以看见,PizzaStore依赖于众多的比萨类型,每新增一个比萨类型,那么PizzaStore就会多一个依赖,这样设计的后果是,任何一个比萨类型出现变动,都会影响到PizzaStore。

3设计原则-依赖倒置原则

设计原则

要依赖抽象,不要依赖具体类。

这个原则听起来很像"针对接口编程,不针对实现编程",是的,但是这里更强调”抽象“两个字。

这个原则说明了,不能让高层组件依赖于低层组件,而且不管高层组件还是低层组件,二者都应该依赖于抽象。

高层组件和低层组件的概念:

所谓高层组件,是由其他底层组件定义其行为的类。例如,PizzaStore是高层组件,因为它的行为是由比萨定义的,PizzaStore创建所有不同的比萨对象,准备、烘培、切片、装盒,而比萨属于低层组件。PizzaStore依赖于这些具体Pizza类。

3.1工厂方法的解决方式

在上面的代码中,尽管我们用超类Pizza作为每个具体比萨类的引用接收,但是我们仍然在代码中创建了比萨的实例,所以仅仅这个抽象是非常鸡肋的。

工厂方法模式的解决方案:

可见,高层组件PizzaStore和低层组件(具体的Pizza)都依赖于Pizza抽象,想要遵循依赖倒置原则,工厂方法模式是最有威力的技巧之一,但是它不是唯一的解决方法。

3.2依赖倒置原则使用方针

下面几种指导方针,可以避免我们违反依赖倒置原则:

  1. 变量不可以持有具体类的引用,即用工厂代替new对象。
  2. 不要让类派生自具体类,应该派生自一个超类,这样就不会依赖于一个具体类。
  3. 不要覆盖基类中已实现的方法,如果覆盖的话,那么这个基类就不是一个真正适合被继承的抽象。基类中已实现的方法,应该由所有子类所共享。

需要注意的是,我们应该合适使用这些指导方针,而不是处处使用,否则就写不出J

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琴瘦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值