架构师的修养1

场景1

设计一个可以创建不同几何图形(Shape),如Circle,Rectangle,Triangle等绘图工具类,每个几何图形均具有绘制Draw()和擦除Erase()两个方法
要求在绘制不支持的几何图形时,抛出一个UnsuppShapeException异常,

可应用简单工厂模式, 因为实现相同的接口Shape。

简单工厂的优点:
1.不需要关心类的创建细节。
2.减轻类之间的耦合依赖,具体类的实现只是依赖于简单工厂,而不依赖其他类。

简单工厂的缺点:
1.扩展复杂,当简单工厂需要生产出另外一种产品的时候,需要扩展工厂的内部创建逻辑,比较有可能引起较大的故障
2.由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中

场景2

我现在需要一瓶可乐,有可口可乐公司生产的可乐也有百事可乐公司生产的可乐,那么对于可乐这个产品等级(抽象工厂中会具体说明),具体生产什么可乐并不是在一个工厂实现,而是由一个可乐工厂指定一个标准(接口里面的抽象方法),可口可乐公司百事可乐公司只要按照这个标准去生产就可以了。

可应用工厂方法模式。

工厂方法的定义是:定义一个创建对象的接口,让实现这个接口的的类去决定实例化具体的类。工厂方法让类的实例化推迟到实现接口的子类中进行。

 

 抽象工厂是提供了创建一系列服务的的对象的接口。那么问题就来了,怎么区分和工厂方法中的服务对象呢?

此时就需要对一组概念有所理解,即产品等级和产品族,

我们可以通过横向和纵向的比较,

横向是某一个手机厂商如苹果,小米等,

他们不仅仅生产手机,还生产电脑,耳机等一系类产品,

那么我们把苹果,小米,华为这样的厂商可以认为他们生产的是一个产品族,

而他们自己本身就是一个抽象工厂的具体实现;那么纵向来看,不管是小米华为还是苹果,他们生产的产品是按照一定的规则来生产,显示屏,电池,处理器等等,所以对于纵向的产品来说,他们又是属于同一个产品等级,我们亦可以称他们的实现为工厂方法。

  综上所述,抽象工厂解决的是横向的产品族(同一个工厂能生产哪些产品),工厂方法解决的是纵向的产品等级(不同工厂生产同一类产品)。

策略模式,

代替if else, 找到合适的方式到达终点,根据情况适应需求的不断变化,

实现方式 策略接口和策略选择类
    根据不同的情况,选择不同的策略,不是简单的if else ,代表这和环境的一种关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值