工厂模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kuV2eJOM-1595474319296)(
“工厂模式结构图”)]
工厂模式特性
-
优点
+ 不用关心对象的具体实现,只需要知道该工厂可以生产相应的对象即可。
+ 如上图所示,如果需要添加其他的具体工厂类,就可以继承,并且新增相应的具体对象类,进行组合就好,不用换更改其他的类,符合开闭原则。 -
缺点
- 相对来说较为繁琐,增加一个新的工厂类,需要增加两个具体的类。具体的工厂类只会生产唯一的对象
抽象工厂模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V05fQlbX-1595474319297)(
)]
个人理解:
- 抽象工厂就是一种有多个对象家族,相较于工厂模式来说,它可以有多个方法,每个方法就可以生产不同的对象,可以有多个不同的具体工厂类,至于到底生产哪个对象,由具体工厂决定,在产品族不会大的改动的情况下,这个是非常好用的,符合开闭原则(但是,如果是需要扩展产品族的,那肯定改动就非常大了)
- 如果仅仅某个产品族的增加了一款产品,那么就只需要多一个具体工厂类就好了
- 有M 个产品等级,就应该有M个具体实现工厂,每个具体的工厂中,需要实现不同的产品族的生产任务
建造者模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x8U2Gt6U-1595474319299)(
结构图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oSCP9HLe-1595474319302)(
)]
应用场景
建造者(Builder)模式创建的是复杂对象,其产品的各个部分经常面临着剧烈的变化,但将它们组合在一起的算法却相对稳定,所以它通常在以下场合使用。
- 创建的对象较复杂,由多个部件构成,各部件面临着复杂的变化,但构件间的建造顺序是稳定的。
- 创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式,即产品的构建过程和最终的表示是独立的。
个人理解
建造者模式,见名就知道,是可以建造出一个对象的,而这个对象是多种多样,但是都是同一类别下的,都需要相同的组件或者步骤才能够生产出来,就如同汽车制造厂一样,能够生产不同的车,车的组成是一样的,但是相同零部件又分不同品质的,不同的制造车间,生产的车的质量是不一样,而指挥者只需要命令某个车间出车,具体怎么生产的细节,是不需要知道的,有高档车,经济型等等。因为生产某产品,需要特别多的组件,而且该产品是基本不变的,就可以使用建造者模式。
建造者模式和工厂模式连用,是非常好的。
适配器模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-17ciM6F7-1595474319303)(
)]
适配器模式主要还是为了解决三方接口参数类型不匹配吧;新旧系统接口不一致。
适配器还是依赖其他类对象来完成相应的功能。
装饰模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sv0uZvrh-1595474319304)(
)]
桥接模式
模式定义
将抽象和实现剥离,使用组合关系来代替继承关系,从而降低抽象和实现的耦合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lgEwttIq-1595474319307)(
桥接和适配联用,个人理解: 桥接采用了组合实现,扩展抽象化角色的operation方法是调用了concreteImplementor 具体的实现化角色,但如果具体的实现化角色可能需要适配其他的功能,那么就可以使用一个适配器来继承具体实现化角色,这样就可以使用到adaptee 适配者来实现(扩展也是可以的)。