复习工厂模式想到的

简单工厂模式仅仅是把判断类型和产生对象的过程封装给一个工厂对象中了。通过在调用时传入不同的工厂来改变产品的种类。

将对于原来的函数的修改转化为了对工厂的修改或者替换。这不是严格意义上的一种设计模式。但是是接下来的模式的基础。



工厂方法模式:

提供一个接口,让实现的子类来决定判断区分生产哪些类。


依赖的观察 :依赖倒转原则:



两个图的倒转变化。


背后的原理和思路。


保持拓展空间的指导原则:

1.不要有指向具体对象的引用。——也就是不要用new,要用工厂来尽量解决。

2.不要从具体的类中派生类。 如果从具体的类中派生类,这个类就依赖于那个具体类了。要从抽象类或者接口中派生。

3.不要去重写在父类中已经实现了的方法。   如果你重写了已经实现了的方法,那么从一开始,重写的方法的类就不是个真正的抽象类。这些已经实现了的方法的意义是被子类复用,而不是重写。




这些原则作为一种指导,是要在折中的过程中被破坏的。破坏那一条原则,就表明你的类在这个原则维护的拓展可能性中很小。1中的含义是让引用可以指向尽可能多种的可以变化的对象。如果这个对象不需要变化和拓展,那么久不需要这个原则,比如指向String类的引用,就不需要犹豫,因为你的String类不会需要拓展和变化。

2原则中会导致派生类依赖于父类,从而二者的拓展性受到严重的制约。而依赖于抽象类和接口,其实现的子类就会有很大的拓展性,根据功能去做自己的事情。

3原则同样是保证拓展性和2类似。



连锁总部在让各个连锁店有足够的变化性和丰富性的同时,又要保证其对于各地的门店有足够的管控能力不能为所欲为。


抽象工厂模式:


加入调味料工厂来满足不同地方特色的口味。

现在的模型成为有不同种类的pizza,每个种类的pizza有不同的地方特色口味。
抽象调味料工厂是所有调味料工厂的父类。
在实现createPizza方法中创建原料工厂,并在每一个种类pizza的构造函数中传入该工厂。  工厂中保持了原料的地方口味的属性。在pizza的prepare方法中会调用其中的方法。

这里面调味料的工厂的超类就是一个抽象工厂。我们可以使用抽象工厂的接口创建一系列的产品。使用这个接口撰写代码,我们就和实际产生产品的接口解耦了。这让我们可以可以实现用来生产不同上下文的工厂,比如说不同的地区,不同的操作系统,不同的外表和感觉。

因为我们的代码和具体的产品解耦,我们可以使用各种不同的替代工厂来实现不同的最终生产行为。

抽象工厂模式可以让我们生产不同族类的产品。


每一个具体工厂对于抽象工厂的实现,使用的是一个工厂方法模式。即工厂里面有被其他部分调用的抽象方法。抽象工厂模式是对于工厂方法模式的拓展。它抽象出了工厂的子类。



工厂方法模式和抽象方法模式都是将产品的创建封装起来,并且使你的代码和具体的类型解耦。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小马工匠坊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值