设计模式
文章平均质量分 79
学习设计模式,编写优雅代码
执笔苦行僧
学习是一场没有终点的马拉松
展开
-
设计模式——访问者模式
设计模式——访问者模式一、基本概念1. 定义访问者(Visitor)模式:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。访问者模式是一种行为设计模式, 它能将算法与其所作用的对象隔离开来。2. 优缺点优点:扩展性好。能够在不修改对象结构中的元素的情况下,为对象结构中的元素添加新的功能;复用性好。可以通过访原创 2021-03-06 10:01:52 · 289 阅读 · 0 评论 -
设计模式——模板模式
设计模式——模板模式一、基本概念1. 定义模板方法(Template Method)模式:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。模板方法模式是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。2. 优缺点优点:它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展;原创 2021-03-06 09:12:19 · 142 阅读 · 0 评论 -
设计模式——策略模式
设计模式——策略模式一、基本概念1. 定义策略(Strategy)模式:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。策略模式是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。2. 优缺点优点:多重条件语句不易维护,而使用策略模式可以避免使用多重条件语原创 2021-03-06 08:38:57 · 309 阅读 · 0 评论 -
设计模式——状态模式
设计模式——状态模式一、基本概念1. 定义状态(State)模式:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。状态模式是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。2. 优缺点优点:结构清晰,状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”;将状态转换显示化,减少对象间的相互依赖。将不同的状态引入独立的对象中会使得原创 2021-03-06 08:15:33 · 372 阅读 · 0 评论 -
设计模式——观察者模式
设计模式——观察者模式一、基本概念1. 定义观察者(Observer)模式:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。观察者模式是一种行为设计模式, 允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。2. 优缺点优点:降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则;目标与观察者之间建立了一套触发机原创 2021-03-05 22:52:31 · 269 阅读 · 0 评论 -
设计模式——备忘录模式
设计模式——备忘录模式一、基本概念1. 定义备忘录(Memento)模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。2. 优缺点优点:提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态;实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息;简化了发起人类。发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,原创 2021-03-05 22:15:20 · 91 阅读 · 0 评论 -
设计模式——中介者模式
设计模式——中介者模式一、基本概念1. 定义中介者(Mediator)模式:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。2. 优缺点优点:类之间各司其职,符合迪米特法则;降低了对象之间的耦合性,使得对象易于独立地被复用;将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。缺点:中介者模式将原本多个对象直接的相互依赖变成了中介者和多个同事类的依原创 2021-03-04 17:18:47 · 96 阅读 · 1 评论 -
设计模式——迭代器模式
设计模式——迭代器模式一、基本概念1. 定义迭代器模式(Iterator):是一种最简单也最常见的设计模式。它可以让用户透过特定的接口巡访容器中的每一个元素而不用了解底层的实现。2. 优缺点优点:访问一个聚合对象的内容而无须暴露它的内部表示;遍历任务交由迭代器完成,这简化了聚合类;它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历;增加新的聚合类和迭代器类都很方便,无须修改原有代码;封装性良好,为遍历不同的聚合结构提供一个统一的接口。缺点:增加了类的个数原创 2021-03-03 21:43:21 · 107 阅读 · 1 评论 -
设计模式——命令模式
设计模式——命令模式一、基本概念1. 定义命令模式(英语:Command pattern)是一种设计模式,它尝试以对象来代表实际行动。命令对象可以把行动(action) 及其参数封装起来,于是这些行动可以被:重复多次、取消(如果该对象有实现的话)、取消后又再重做。2. 优缺点优点:通过引入中间件(抽象接口)降低系统的耦合度;扩展性良好,增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,且满足“开闭原则”;可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组原创 2021-03-03 21:01:40 · 201 阅读 · 1 评论 -
设计模式——责任链模式
设计模式——责任链模式一、基本概念1. 定义**责任链模式(Chain of Responsibility):**在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。2. 优缺点优点:降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的结构,发送者和接收者也无须拥有对方的明确原创 2021-03-02 09:53:26 · 194 阅读 · 0 评论 -
设计模式——代理模式
设计模式——代理模式一、基本概念1. 定义代理模式(英语:Proxy Pattern)是程序设计中的一种设计模式。所谓的代理者是指一个类别可以作为其它东西的接口。代理者可以作任何东西的接口:网络连接、存储器中的大对象、文件或其它昂贵或无法复制的资源。2. 优缺点优点:代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;代理对象可以扩展目标对象的功能;代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性缺点:代理模式会造成系统设原创 2021-03-02 08:54:08 · 228 阅读 · 0 评论 -
设计模式——享元模式
设计模式——享元模式一、基本概念1. 定义享元模式(英语:Flyweight Pattern)是一种软件设计模式。它使用物件用来尽可能减少内存使用量;于相似物件中分享尽可能多的资讯。当大量物件近乎重复方式存在,因而使用大量内存时,此法适用。通常物件中的部分状态(state)能够共享。常见做法是把它们放在数据结构外部,当需要使用时再将它们传递给享元。2. 优缺点优点:相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。缺点:为了使对象可以共享,原创 2021-03-01 23:55:07 · 215 阅读 · 0 评论 -
设计模式——外观模式
设计模式——外观模式一、基本概念1. 定义外观模式(Facade pattern),是软件工程中常用的一种软件设计模式,它为子系统中的一组界面提供一个统一的高层界面,使得子系统更容易使用。2. 优缺点优点:降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类;对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易;降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程,因为编译一个子系统不会影响其他的子系统,也不会影响外观对象。原创 2021-03-01 22:59:34 · 173 阅读 · 0 评论 -
设计模式——装饰器模式
设计模式——装饰器模式一、基本概念1. 定义修饰模式,是面向对象编程领域中,一种动态地往一个类中添加新的行为的设计模式。就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个类添加一些功能。2. 优缺点优点:是继承的有力补充,比继承灵活,在不改变原有对象的情况下,动态的给一个对象扩展功能,即插即用;通过使用不用装饰类及这些装饰类的排列组合,可以实现不同效果;装饰器模式完全遵守开闭原则。缺点:装饰器模式会增加许多子类,过度使用会增加程序得复杂性。3. 结构原创 2021-03-01 21:49:44 · 148 阅读 · 0 评论 -
设计模式——组合模式
设计模式——组合模式一、基本概念1. 定义组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构型设计模式。2. 优缺点优点:组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码;更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,原创 2021-02-02 13:18:52 · 271 阅读 · 0 评论 -
设计模式——桥接模式
设计模式——桥接模式一、基本概念1. 定义**桥接模式(Bridge)**是软件设计模式中最复杂的模式之一,它把事物对象和其具体行为、具体特征分离开来,使它们可以各自独立的变化。2. 优缺点优点:抽象与实现分离,扩展能力强;符合开闭原则;符合合成复用原则;其实现细节对客户透明。缺点:由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度。3. 结构桥接(Bridge)模式包含以下主要角色:抽原创 2021-02-02 11:26:02 · 320 阅读 · 1 评论 -
设计模式——适配者模式
设计模式——适配者模式一、基本概念1. 定义适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(英语:wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类能在一起工作,做法是将类自己的接口包裹在一个已存在的类中。2. 优缺点优点:客户端通过适配器可以透明地调用目标接口。复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。在很多业务场景中符合开原创 2021-02-01 21:44:06 · 405 阅读 · 0 评论 -
设计模式——建造者模式
设计模式——建造者模式一、基本概念1. 定义建造者模式(英:Builder Pattern)是一种设计模式,又名:建造模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。2. 优缺点优点:封装性好,构建和表示分离。扩展性好,各个具体的建造者相互独立,有利于系统的解耦。屏蔽细节,客户端不必知道产品内部组成的细节,建造者可以对创建过程逐步细化,而不对其它模块产生任何影响,便于控制细节风险。缺点:产品原创 2021-02-01 21:18:02 · 137 阅读 · 0 评论 -
设计模式——抽象工厂模式
设计模式——抽象工厂模式一、基本概念1. 定义抽象工厂模式(英语:Abstract factory pattern)是一种软件开发设计模式。抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来。2. 优缺点原创 2021-02-01 17:54:06 · 183 阅读 · 0 评论 -
设计模式——工厂方法模式
设计模式——工厂方法模式一、基本概念1. 定义工厂方法模式(英语:Factory method pattern)是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。”2. 优缺点优点:用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。灵活性增强,对于新产品的创建,只需多写原创 2021-02-01 15:24:06 · 276 阅读 · 0 评论 -
设计模式——原型模式
设计模式——原型模式一、基本概念1. 定义原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。2. 优缺点优点:Java 自带的原型模式基于内存二进制流的复制,在性能上比直接 new 一个对象更加优良;可以使用深克隆方式保存对象的状态,使用原型模式原创 2021-02-01 12:28:16 · 134 阅读 · 0 评论 -
设计模式——单例模式
设计模式——单例模式一、定义单例模式,也叫单子模式,是一种常用的软件设计模式,属于创建型模式的一种。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。又比如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现原创 2021-01-31 21:52:47 · 139 阅读 · 2 评论