我们一起来读书吧 关注:154贴子:2,883
  • 0回复贴,共1

《设计模式》第三章有感

只看楼主收藏回复

在第三章中具体介绍创建型设计模式,以及其优缺点、适用场景。
抽象工厂模式
抽象工厂模式是当一系列对象可以划分为多个不同类型,并且根据不同场景会使用不同类型的对象实现时,我们可以通过定义创建对像的接口,以及对象自身的抽象接口,实现根据不同场景使用不同的创建对象类来获取相应的对象。
通过抽象工厂的结构图我们可以看出,对工厂类、对象类进行了抽象,业务调用方只关系相应的接口即可,并不关系具体的实现。当我们想获取不同的对象时,通过创建不同的抽象工厂子类对象即可。
优点:(1)将类的定义与实现进行了分离,客户端不需要知道具体的实现 (2)客户端仅依赖抽象工厂,为根据需求更改具体的工厂实现提供了方便
缺点:(1)抽象工厂的接口一旦被定义后,如果增加创建新的对象方法,就需要修改抽象工厂类以及其所有子类。

Builder模式
Builder模式是指当我们想要根据不同场景或者业务需求,通过实例化得到具有不同内部状态的对象时,我们可以借助一个辅助类控制对象的实例化过程,从而得到具有不同内部状态的对象。这个辅助类就称为Builder类,即建造者类。
通过Builder模式的构造图可以看出,Builder模式会抽象出Builder接口定义实例化对象的一些特定步骤或者范围,然后通过Builder子类来实现对对象(Product对象)的具体实例化操作,最后Director类通过Builder类来构造对象。其实在实际业务中Director类就是业务调用方。
优点:(1)通过Builder类实现了对象构造代码和表示(内部定义逻辑)代码的分离(2)可以根据不同业务需求实例化出具有不同内部状态的对象。
缺点:(2)创建对象时会增加额外类

工厂方法模式
工厂方法模式是业务创建对象时并不关系是使用的具体是哪个类,只关系这些类有相同的实现接口即可,工厂方法模式通过定义创建产品对象的接口,从而将产品对象的创建延迟到其子类,通过不同的子类实现创建不同的对象,从而实现这个目的。
从工厂方法模式的结构图中可以看出,Creater中定义了工厂方法接口,然后其子类实现了对Product子类对象的创建,业务侧只需要知道创建的对象是Produnt即可。对比工厂方法模式和抽象工厂模式可以看出,抽象工厂模式其实是对工厂方法模式的扩展,因为在抽象工厂模式中抽象工厂类中会定义多个创建对象的方法,从而可以对应不同的业务类型。
优点:工厂方法可以使创建对象仅依赖于接口(即Product)
缺点:在使用这种模式时可能创建一个对象要定义多个接口和类。

原型模式
原型模式是指通过原型实例来制定创建对象的类型,然后通过原型接口定义对象的拷贝方法,通过拷贝来创建新的对象。
通过原型模式的结构图我们可以看出原型接口定义了克隆接口,原型子类实现了拷贝接口并返回子类对象。
优点:(1)如果构建对象的成本较大,原型模式的赋值一个对象可以相对简单一些(2)可以通过深拷贝保持被复制对象的状态(3)无需提供专门的工厂类来创建对象
缺点:(1)每个类型对象都要有自己的克隆方法。(2)深拷贝需要完成每个属性都支持深拷贝

单例模式
单例模式是指一个类在全局仅存在一个实例,并且这个类提供这个实例的访问入口
优点:(1)只提供一个实例并且可以控制业务如何访问这个实例
缺点:(2)全局只存在一个实例,状态的改变需要周知到使用该实例的各个业务

在第三章中作者介绍了创建型设计模式,读完这一章感受比较深的就是如何在实际项目中应用这些设计模式?如何选择设计模式?
从我自己的开发过程中来说我认为设计模式是解决问题的一种优秀的总结方式,为我们提供了一种解决问题的思路,在实际项目中我们可能会遇到一个问题用A设计模式也行,用B设计模式也行的困扰,这时候我觉得如果可以考虑清除后续的业务扩展,对选择相对合适的设计模式也有有一定帮助,如果还是觉得A或者B都可以,我觉得可以先用一种设计模式实现,在实现中验证选择的设计模式是否正确。
因为好的设计从来都不是一蹴而就的,都是在实践中不断优化而来的。但是学习设计模式可以让我们减少走弯路的过程。


IP属地:北京1楼2024-02-08 16:07回复