设计模式
uu_uuu
这个作者很懒,什么都没留下…
展开
-
设计模式——七个设计原则
1概述面向对象编程有七大原则,设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。(图片来源:https://www.jianshu.com/p/8a293e4a888e)2七个设计原则2.1单一职责原则(SRP)Single Responsibility Principle,定义是一个类,应该只有一个引起它变化的原因。类变化的原因就是职责,如...原创 2019-09-05 14:02:54 · 829 阅读 · 0 评论 -
行为型模式(1)——模板方法模式
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。行为型模式包含以下 11...原创 2019-09-07 20:39:54 · 259 阅读 · 0 评论 -
行为型模式(2)——命令模式
定义将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。假设现在有一个请求处理类(低层类/第三方类),如果客户端拿到这个类之后直接调用它,那么客户端和这个请求处理类之间的藕合度过高。这时候我们在客户端的请求发送类和请求处理类之间增加一个Invoker类,再将请求发送类发送的所有请求封装成对象...原创 2019-09-07 21:06:53 · 109 阅读 · 0 评论 -
行为型模式(3)——迭代器模式
定义提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式。优点:访问一个聚合对象的内容而无须暴露它的内部表示。 遍历任务交由迭代器完成,这简化了聚合类。 它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。 增加新的聚合类和迭代器类都很方便,无须修改原有代码,体现“开放-封闭原则”。 封装性良好,为遍历不同...原创 2019-09-07 22:02:15 · 120 阅读 · 0 评论 -
行为型模式(4)——观察者模式
定义指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。适用场景:如果存在一系列类,他们都需要向指定类获取指定的数据,当获取到数据后需要触发相应的业务逻辑。这种场景就可以用观察者模式来实现。优点:降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。 ...原创 2019-09-07 22:18:39 · 111 阅读 · 0 评论 -
行为型模式(5)——中介者模式
定义定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。优点:降低了对象之间的耦合性,使得对象易于独立地被复用。 将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。缺点:当同事类太多时,中介者的职责将很大,它会变得复杂而庞大,以至于系统难以维护。...原创 2019-09-08 13:55:33 · 136 阅读 · 0 评论 -
行为型模式(6)——备忘录模式
定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。一个对象中一般都封装了很多属性,这些属性的值会随着程序的运行而变化。当我们需要保存某一时刻对象的某些值的时候,我们就再创建一个对象,将当前对象中的一些属性保存到新的对象中,当我们需要恢复的时候再从新的对象中取出属性值即可。这种想法就是备忘录模式...原创 2019-09-08 14:45:01 · 154 阅读 · 0 评论 -
行为型模式(7)——解释器模式
定义给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。解释器模式是一种类行为型模式。优点:扩展性好。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。 容易实现。在语法树中的每个表达式节点类都是相似的,所以...原创 2019-09-08 14:55:38 · 309 阅读 · 0 评论 -
行为型模式(8)——状态模式
定义对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。一个函数原本有很多判断语句,现在把判断语句中的每一种状态封装成一个类,每一个状态类中均有一个handle()函数,该函数能对当前状态做出处理,并且能指明不能处理时的下一个状态类。优点:状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一...原创 2019-09-08 15:40:05 · 193 阅读 · 0 评论 -
行为型模式(9)——责任链模式
定义为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链,使得多个对象都有机会处理请求;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。责任链模式也叫职责链模式。优点:降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的结构,发送者和接收者也无须拥有对方的明确信息。 增强了系统的可...原创 2019-09-08 15:51:25 · 194 阅读 · 0 评论 -
行为型模式(10)——策略模式
定义该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。一个类中的一些行为,可能会随着系统的迭代而发生变化。为了使得该类满足开放-封闭原则(即:具备可扩展性 或 弹性),我们需要将这些未来会发生动态变化的行为从该类中剥...原创 2019-09-08 16:08:14 · 354 阅读 · 0 评论 -
结构型模式(7)——代理模式
定义由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。优点:代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; 代理对象可以扩展目标对象的功能; 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度;缺点:在客户端和目标对象之间增加一个代理对象,会造成...原创 2019-09-06 16:36:55 · 115 阅读 · 0 评论 -
结构型模式(6)——享元模式
定义运用共享技术来有効地支持大量细粒度对象的复用。一个类它可能生成好多对象,但这些对象根据属性值的不同一共分成N类,每种类型中属性值都是一样的。在这种情况下,如果创建好多对象,那么这些对象中很多属性值都是重复的,从而造成了大量的内存浪费。而享元模式能够解决重复对象的内存浪费的问题。享元模式使用一个工厂类,在工厂类中为每种类型创建一个对象,而且每种类型的对象只有一个。当客户端需要某种类型...原创 2019-09-06 16:21:33 · 108 阅读 · 0 评论 -
结构型模式(5)——外观模式
定义是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。外观(Facade)模式是“迪米特法则”的典型应用。优点:降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。 对客户屏蔽了子系统组件,减少了客户处...原创 2019-09-06 16:02:38 · 109 阅读 · 0 评论 -
创建型模式(1)——单例模式
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成。创建型模式分为以下几种:单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而...原创 2019-09-05 15:19:22 · 112 阅读 · 0 评论 -
创建型模式(2)——工厂方法模式
1定义工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”,它的缺点是增加新产品时会违背“开闭原则”。例如:工厂方法模...原创 2019-09-05 15:41:24 · 129 阅读 · 0 评论 -
创建型模式(3)——抽象工厂模式
1 实际问题使用工厂模式写一个程序,既能使用SqlServer访问User表,又能使用Access访问User表。1.创建对User表进行访问的接口UserDao,该接口中包含了所有对User类处理的函数。2.由于Access和Oracle数据库中都含有User表,但不同的数据库对User表实现相同操作的实现是不一样的,因此创建两个UserDao的实现类,分别用户处理Oracle和...转载 2019-09-05 15:57:27 · 124 阅读 · 0 评论 -
创建型模式(4)——建造者模式
“建造者模式”生活中的例子:肯德基做汉堡的过程都是有严格的规范的,不管是麦香鸡腿堡还是新奥尔良烤鸡腿堡,他们的制作步骤都是有严格规定,做汉堡的人既不能多做一步,也不能少做一步。对于不同的汉堡来说,虽然每一步加的料所有不同,但做汉堡的步骤都是一样的。因为有了对做汉堡过程的严格控制,因而全国所有的肯德基店做出来的汉堡味道都是一样的。这些汉堡就是一个个对象,刚被创建出来的时候它就是两片面包片,没...转载 2019-09-05 16:13:35 · 89 阅读 · 0 评论 -
储备知识——UML六种关系
耦合度大小关系泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖依赖(Dependency) 是一种使用的关系,即一个类的实现需要另一个类的协助。 Bird类中有一个setFly方法,它需要使用者用到IFly接口的实现,那么这种关系就是依赖关系。 依赖关系在Java语言中体现为局域变量、方法的形参,或者对静态方法的调用。关联(Assoc...原创 2019-09-05 16:21:57 · 219 阅读 · 0 评论 -
创建型模式(5)——原型模式
1定义用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。现在有一个类,它要产生大量的对象,而且这些对象中的属性值大部分都相同;如果我们要获取这样一个对象的时候每次都通过new,然后再set每一个属性值,那么这样就太麻烦了。这种情况下使用原型模式非常便捷:我们让这个类去实现Prototype接口,并且实现该接口的clone()函数,在clone函数中让当前对象进行一次浅拷...原创 2019-09-05 21:34:55 · 136 阅读 · 0 评论 -
结构型模式(1)——适配器模式
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。结构型模式分为以下 7 种:代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该...原创 2019-09-05 21:57:05 · 243 阅读 · 0 评论 -
结构型模式(2)——桥接模式
定义将抽象与实现分离,使它们可以独立变化。它是用组合(或聚合)关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。优点:由于抽象与实现分离,所以扩展能力强; 其实现细节对客户透明。缺点:由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度。模式结构:抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象...原创 2019-09-06 15:25:48 · 125 阅读 · 0 评论 -
结构型模式(3)——装饰模式
定义指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。优点:装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。继承通过覆盖的方式重写需要扩展的函数,当然也可以通过super.xxx()获取原本的功能,然后在该功能基础上扩展新功能,但它只能增加某一项功能;如果要通过继承实现增加多种功能,那么需要多层继承多个类来实现;而装...原创 2019-09-06 15:45:36 · 177 阅读 · 0 评论 -
结构型模式(4)——组合模式
定义有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。优点:组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码; 更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,满足“开闭原则”;缺点:设计较复杂...转载 2019-09-06 15:54:27 · 122 阅读 · 0 评论 -
行为型模式(11)——访问者模式
定义将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。优点:扩展性好。能够在不修改对象结构中的元素的情况下,为对象结构中的元素添加新的功能。 复用性好。可以通过访问者来定义整个对象结构通用的功能,从而提高系...转载 2019-09-08 16:19:39 · 244 阅读 · 0 评论