《设计模式之禅》精读(一)

《设计模式之禅》精读(一)_第1张图片

前言

最近在工作闲暇之余阅读了《设计模式之禅》这本书,对其中一些知识点做简单的归纳整理,以资充实技能之用。坦白讲,设计模式在很多人看来是比较虚的东西。工作几年但不知道甚至尚未意识到使用设计模式的大有人在,但作为一个合格的开发者,了解并学习设计模式是很有必要的。

什么是设计模式?

设计模式是什么?它是一套理论,由软件界的先辈们(The Gang of Four:包括Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)总结出的一套可以反复使用的经验,它可以提高代码的可重用性,增强系统的可维护性,以及解决一系列的复杂问题。

设计模式不是工具,它是软件开发的哲学,它能指导你如何去设计一个优秀的架构、编写一段健壮的代码、解决一个复杂的需求。

一、单例模式

一提到设计模式,很多人脑海中第一反应就是单例模式。那么,什么是单例模式呢?

Singleton类称为单例类,通过使用private的构造函数确保了在一个应用中只产生一个实例,并且是自行实例化的(在Singleton中自己使用new Singleton())。

其类图为:

《设计模式之禅》精读(一)_第2张图片

单例模式的优点:

减少了内存开支

减少了系统的性能开销

可以避免对系统的多重占用

可以在系统设置全局的访问点

单例模式的缺点:

单例模式一般没有接口,扩展很困难

单例模式对测试是不利的

单例模式与单一职责原则有冲突

单例模式的扩展:

采用有上限的多例模式,我们可以在设计时决定在内存中有多少个实例,方便系统进行扩展,修正单例可能存在的性能问题,提供系统的响应速度。例如读取文件,我们可以在系统启动时完成初始化工作,在内存中启动固定数量的reader实例,然后在需要读取文件时就可以快速响应。

二、工厂方法模式

工厂方法模式使用的频率非常高,在我们日常的开发中总能见到它的身影。

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

其类图为:

《设计模式之禅》精读(一)_第3张图片

工厂方法模式的优点:

良好的封装性

拓展性非常优秀

屏蔽产品类

是典型的解耦框架

工厂方法模式的使用场景:

工厂方法模式是new一个对象的替代品,所以在所有需要生成对象的地方都可以使用,但是需要慎重地考虑是否要增加一个工厂类进行管理,增加代码的复杂度。

需要灵活的、可扩展的框架时,可以考虑采用工厂方法模式。

工厂方法模式可以用在异构项目中

可以使用在测试驱动开发的框架下。

三、抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是一种比较常用的模式。

其定义为:

为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。

其类图为:

《设计模式之禅》精读(一)_第4张图片

抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。

抽象工厂模式的优点:

良好的封装性

产品族内的约束非公开状态

抽象工厂模式的使用场景:

抽象工厂模式的使用场景定义非常简单:一个对象族(或是一组没有任何关系的对象)都有相同的约束,则可以使用抽象工厂模式。什么意思呢?例如一个文本编辑器和一个图片处理器,都是软件实体,但是*nix下的文本编辑器和Windows下的文本编辑器虽然功能和界面都相同,但是代码实现是不同的,图片处理器也有类似情况。也就是具有了共同的约束条件:操作系统类型。于是我们可以使用抽象工厂模式,产生不同操作系统下的编辑器和图片处理器。

你可能感兴趣的:(《设计模式之禅》精读(一))