设计模式
GoF 23种设计模式精讲
Hiro · ZHAO
这个作者很懒,什么都没留下…
展开
-
创建型模式——抽象工厂模式
抽象工厂的定义与特点抽象工厂(AbstractFactory) 模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。产品族:同类产品属于可以被称为同级产品,而不同类型的产品组合起来的可以被称为产品族,这些产品分属不同的产品等级结构中。使用抽象工厂模式一般要满足以下条件:系统中有多个产品族,每个具体工厂创原创 2020-09-25 11:34:44 · 212 阅读 · 0 评论 -
创建型模式——工厂方法模式
在《简单工厂模式》一节我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。优点:用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。缺点:类的个数容易过多,增加复杂度增加了原创 2020-09-23 17:59:24 · 272 阅读 · 0 评论 -
简单工厂模式
简单工厂模式定义工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”。在简单工厂模式中创建实例的方法通常为静态(static)方法,因此简单工厂模式(Simple Fa原创 2020-09-23 17:35:06 · 256 阅读 · 0 评论 -
创建型模式——原型模式
原型模式的定义与特点原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。原型模式的优点:Java 自带的原型模式基于内存二进制流的复制,在性能上比直接 new 一个对象更加优良。可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建对象的过程,以便在需要的时候使用(例如恢复到历史某一状态),原创 2020-09-23 17:13:31 · 204 阅读 · 0 评论 -
创建型模式——单例模式
单例模式的定义与特点单例模式(Singleton)的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。单例模式有 3 个特点:单例类只有一个实例对象;该单例对象必须由单例类自行创建;单例类对外提供一个访问该单例的全局访问点。单例模式的优点和缺点单例模式的优点:单例模式可以保证内存里只有一个实例,减少了内存的开销。可以避免对资源的多重占用。单例模式设置全局访问点,可以优化和共享资源的访问。单例模式的缺点:单例模式一般没有接口,扩展困难。如果要扩展,则除了修改原来原创 2020-09-23 11:02:09 · 93 阅读 · 0 评论 -
软件设计七大原则之合成复用原则
合成复用原则的定义合成复用原则(Composite Reuse Principle,CRP)又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)。它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。合成复用原则的重要性通常类的复用分为继承复用和合成复用两种,继承复用虽然有简单和易实现的优原创 2020-09-22 16:13:31 · 463 阅读 · 0 评论 -
软件设计七大原则之迪米特法则
迪米特法则的定义迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学(Northeastern University)的一个名为迪米特(Demeter)的研究项目,由伊恩·荷兰(Ian Holland)提出,被 UML 创始者之一的布奇(Booch)普及,后来又因为在经典著作《程序员修炼之道》(The Pragmatic Programmer)提及而广为人知。迪米特法则的定义是:只与你的直接朋原创 2020-09-22 16:10:20 · 342 阅读 · 0 评论 -
软件设计七大原则之接口隔离原则
接口隔离原则的定义接口隔离原则(Interface Segregation Principle,ISP)要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。2002 年罗伯特·C.马丁给“接口隔离原则”的定义是:客户端不应该被迫依赖于它不使用的方法(Clients should not be forced to depend on methods they do not use)。该原则还有另外一个定义:一个类对另一个类的依赖应该建立在最小的接口上(The depe原创 2020-09-22 16:07:00 · 320 阅读 · 0 评论 -
软件设计七大原则之单一职责原则
单一职责原则的定义单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则,由罗伯特·C.马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中提出的。这里的职责是指类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(There should never be more than one reason for a class to change)。该原则提出对象不应该承担太多职责,如果一个对象承原创 2020-09-22 16:03:38 · 349 阅读 · 0 评论 -
软件设计七大原则之依赖倒置原则
依赖倒置原则的定义依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High level modules shouldnot depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions)。其核心思想是:原创 2020-09-22 16:00:47 · 153 阅读 · 0 评论 -
软件设计七大原则之里氏替换原则
里氏替换原则的定义里氏替换原则主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中蕴含的原理。里氏替换原是继承复用的基础,它反映了基类与子类之间的关系,是对开闭原则的补充,是对实现抽象化的具体步骤的规范。里氏替换原则的作用里氏替换原则的主要作用如下。里氏替换原则是实现开闭原则的重要方式之一。它克服了继承中重写父类造成的可复用性变差的缺点。它是动作正确性的保证。即类的扩展不会给已有的系统引入新的错误,降低了代码出错的可能性。加强程序的健壮性,同时变更时可以原创 2020-09-22 15:57:08 · 240 阅读 · 0 评论 -
软件设计七大原则之开闭原则
开闭原则的定义开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification),这就是开闭原则的经典定义。这里的软件实体包括以下几个部分:原创 2020-09-22 15:51:03 · 604 阅读 · 0 评论 -
UML图中的类图及类图之间的关系
UML简介UML(Unified Modeling Language,UML)统一建模语言,是用来设计软件蓝图的可视化建模语言,它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。类图类图在UML中用于表示类以及类与类之间的静态关系的信息,也是我们在学习设计模式时最重要的一种模型,通过UML类图,我们可以更加清晰明了的理解设计模式的工作原理,在后续章节中会频繁使用到。类图中的关系表示符在使用UML进行面向对象设计时,为了清晰的表述类与类之间的关系,UML提供了一系列的关系标识符,如下所原创 2020-09-22 15:35:40 · 535 阅读 · 0 评论 -
GoF 的 23 种设计模式的分类和功能
1. 根据目的划分根据模式的目的来划分可以分为:创建型模式、结构型模式和行为型模式 3 种。创建型模式:用于描述 “怎样创建对象” ,它的主要特点是 “将对象的创建与使用分离” 。GoF 中提供了:单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式等5种创建型模式;结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF中提供了:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式等7种结构型模式;行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象无原创 2020-09-22 14:53:02 · 392 阅读 · 0 评论 -
软件设计模式概述
软件设计模式的产生背景“设计模式”这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977 年,美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造(A Pattern Language: Towns Building Construction)中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。1979 年他的另一部原创 2020-09-22 10:45:25 · 149 阅读 · 0 评论