- 博客(23)
- 收藏
- 关注
转载 #23种设计模式之--23-- Interpreter(解释器模式)#
Interpreter(解释器模式)解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。意图 给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。主要解决 对于一些固定文法构建一个解释句子的解释器。何时使用 如果一种特定类型的问题发生的频率足...
2019-05-09 19:51:23
133
转载 #23种设计模式之--22-- Facade Pattern(外观模式)#
Facade Pattern(外观模式) 针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下。一、概念介绍 外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。二、角色及使用场景...
2019-05-09 19:51:13
176
转载 #23种设计模式之--21-- State(状态模式)#
State(状态模式)一、引出状态模式假设我们现在有一个糖果机项目,那么我们知道正常一般糖果机提供给用户的行为有这么几种:投入硬币、转动曲柄、退出硬币几种行为;那么糖果机呢一般有这几中状态,待机状态、持有硬币的准备状态、运行状态即正在售出状态和初始状态 这么几种正常状态。 我们发现处于不同状态的时候,持有的行为是不一样的,图如下:如果我们采用传统的方法来写代码,那么在投...
2019-05-09 19:51:05
238
转载 #23种设计模式之--20-- Memento(备忘录模式)#
Memento(备忘录模式)备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。...
2019-05-08 00:10:49
154
转载 #23种设计模式之--19-- Proxy(代理模式)#
Proxy(代理模式)代理模式是Java常见的设计模式之一。所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。为什么要采用这种间接的形式来调用对象呢?一般是因为客户端不想直接访问实际的对象,或者访问实际的对象存在困难,因此通过一个代理对象来完成间接的访问。在现实生活中,这种情形非常的常见,比如请一个律师代理来打官司。下面例子的代码可以访问源码。欢迎...
2019-05-08 00:10:40
113
转载 #23种设计模式之--18-- Flyweight(共享模式/享元模式)#
Flyweight(共享模式/享元模式)当前咱们国家正在大力倡导构建和谐社会,其中一个很重要的组成部分就是建设资源节约型社会,“浪费可耻,节俭光荣”。在软件系统中,有时候也会存在资源浪费的情况,例如在计算机内存中存储了多个完全相同或者非常相似的对象,如果这些对象的数量太多将导致系统运行代价过高,内存属于计算机的“稀缺资源”,不应该用来“随便浪费”,那么是否存在一种技术可以用于节约内存使用空间,...
2019-05-08 00:10:33
192
转载 #23种设计模式之--17-- Command(命令)#
Command(命令)一、定义命令模式是一个高内聚的模式,其定义为:Encapsulate a request as an object,there by letting you parameterize clients with different requests,queue or log requests,and support undoable operations.(将一个请求封...
2019-05-08 00:10:20
97
转载 #23种设计模式之--16-- Strategy Pattern(策略)#
Strategy Pattern(策略) 由于最近在研究学习设计模式,我会用自己的理解方式来表述对设计模式的学习和认识,通过最常用、好记的案例来记住和使用设计模式,希望对设计代码方面有所提高和改进。一.应用背景 在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据应用场景的不同选择不同的算法或者策略来完成该功能。把一个类(A)中经常改变或者将来可...
2019-05-08 00:10:12
100
转载 #23种设计模式之--15-- Template Pattern(模版)#
Template Pattern(模版)引入:这几天在看一本讲spring源码的书《SPRING技术内幕》里面在讲加载配置文件的时候,可以有不同的加载方式,如根据文件系统目录加载配置文件(FileSystemXmlApplicationContext),类路径加载配置文件(ClassPathXmlApplicationContext),以及根据项目上下文目录(XmlWebApplication...
2019-05-08 00:09:57
82
转载 #23种设计模式之--14-- Chain of Responsibility(责任链)#
Chain of Responsibility(责任链)责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。Tomcat中的Filter就是使用了责任链模式,创建一...
2019-05-08 00:09:45
126
转载 #23种设计模式之--13-- Decorator(装饰)#
Decorator(装饰)职责:动态的为一个对象增加新的功能 装饰器模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。实现细节:——Component抽象构件角色:真实对象和装饰对象有相同的接口。这样,客户端对象就能够以与真实对象相同的方式同装饰对象交互。——ConcreteComp...
2019-05-08 00:09:34
91
转载 #23种设计模式之--12-- Visitor(访问者)#
Visitor(访问者)访问者模式,是行为型设计模式之一。访问者模式是一种将数据操作与数据结构分离的设计模式,它可以算是 23 中设计模式中最复杂的一个,但它的使用频率并不是很高,大多数情况下,你并不需要使用访问者模式,但是当你一旦需要使用它时,那你就是需要使用它了。访问者模式的基本想法是,软件系统中拥有一个由许多对象构成的、比较稳定的对象结构,这些对象的类都拥有一个 accept 方法用...
2019-05-08 00:08:32
123
转载 #23种设计模式之--11-- Iterator(迭代器)#
Iterator(迭代器)前言迭代器设计模式在 java 中算是使用最多的模式之一了。它主要应用在需遍历的数据集合中,迭代器模式封装了该数据集合的数据存储结构。用户只需关心该集合是否还有数据,如果有,取出下一个数据。实现迭代器模式实现十分简单,它将数据集合封装在迭代器中,并对外提供两个 hasNext() 和 next() 方法。hasNext() 返回集合中是否还有下一个数据,nex...
2019-05-08 00:08:01
86
转载 #23种设计模式之--10-- Composite(组合)#
Composite(组合)引入composite模式composite模式的实例 composite模式的分析 小结引入composite模式在计算机文件系统中,有文件夹的概念,文件夹里面既可以放入文件也可以放入文件夹,但是文件中却不能放入任何东西。文件夹和文件构成了一种递归结构和容器结构。虽然文件夹和文件是不同的对象,但是他们都可以被放入到文件夹里,所以一定意义上,文件...
2019-05-04 17:58:58
160
转载 #23种设计模式之--9-- Observer(观察者)#
Observer(观察者)有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 将一个系统分割成一个一些类相互协作的类有一个不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。观察者就是解...
2019-05-04 17:53:05
120
转载 #23种设计模式之--8-- Mediator(中介者)#
Mediator(中介者)一个系统或者模块的类和类之间的交互如下图所示:从图中可以看出,每一个类几乎都与另外所有的类有交互,如果类A发生了修改,那么类B,D,E,G,I等类也需要随着修改;反过来,如果其他几个类有变动,那么类A也需要修改。这个系统中,类与类之间耦合度太高,如果是一个真正的系统,那么会有比这多的多的类,如果类与类这间也是这样的交互关系,那就真是牵一发而动全身了,这个系统...
2019-05-04 17:47:00
139
转载 #23种设计模式之--7-- Bridge(桥接)#
Bridge(桥接)处理多维度变化在正式介绍桥接模式之前,我先跟大家谈谈两种常见文具的区别,它们是毛笔和蜡笔。假如我们需要大中小3种型号的画笔,能够绘制12种不同的颜色,如果使用蜡笔,需要准备3×12 = 36支,但如果使用毛笔的话,只需要提供3种型号的毛笔,外加12个颜料盒即可,涉及到的对象个数仅为3 + 12 = 15,远小于36,却能实现与36支蜡笔同样的功能。如果增加一种新型号的...
2019-05-04 16:34:20
220
转载 #23种设计模式之--6-- Adapter(适配器)#
Adapter(适配器模式)将一个类的接口转换成客户希望的另外一个接口。 我们经常碰到要将两个没有关系的类组合在一起使用,第一解决方案是:修改各自类的接口,但是如果我们没有源代码,或者,我们不愿意为了一个应用而修改各自的接口。 怎么办?使用Adapter,在这两种接口之间创建一个混合接口。模式中的角色需要适配的类(Adaptee):需要适配的类。适配器(Adapter)...
2019-05-04 16:20:25
142
转载 #23种设计模式之--5-- Builder(建造者模式)(生成器)#
Builder(建造者模式)(生成器)建造者模式:是将一个复杂的对象的构建与它的表示分离(同构建不同表示),使得同样的构建过程可以创建不同的表示。 一个人活到70岁以上,都会经历这样的几个阶段:婴儿,少年,青年,中年,老年。并且每个人在各个阶段肯定是不一样的,世界上不存在两个人在人生的这5个阶段的生活完全一样,但是活到70岁以上的人,都经历了这几个阶段是肯定的。实际上这是一个比较经典的...
2019-05-04 16:10:07
202
转载 #23种设计模式之--4--Prototype (原型)#
Prototype(原型)一、介绍及定义①介绍:原型模式是一种创建型的模式。原型两个字表明了该模式应该有一个样板实例,用户从这个样板实例中复制出一个内部属性一致的对象,这个过程通俗的讲就是“克隆”。这个被复制的实例就称为“原型”。②定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。③场景:用于创建复杂的和耗时的实例注:通过实现Cloneable接口的原型模式在调用...
2019-05-04 15:56:56
154
转载 #23种设计模式之--3--Singleton(单例模式)#
Singleton(单例模式)作用: 保证在Java应用程序中,一个类Class只有一个实例存在。好处:由于单例模式在内存中只有一个实例,减少了内存开销。 单例模式可以避免对资源的多重占用,例如一个写文件时,由于只有一个实例存在内存中,避免对同一个资源文件的同时写操作。 单例模式可以再系统设置全局的访问点,优化和共享资源访问。使用情况:建立目录 数...
2019-05-04 15:39:07
131
转载 #23种设计模式之--2--Abstract Factory (抽象工厂)#
Abstract Factory(抽象工厂)抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 啥意思?就是把生产抽象成一个接口,每个实例类都对应一个工厂类(普通工厂只有一个工厂类),同时所有工厂类都继承这个生产接口。生产接口Provider:interface Provider { Animal produce(); }每个产品都...
2019-05-04 15:26:55
108
转载 #23种设计模式之--1--Factory(工厂模式)#
Factory(工厂模式)定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。对同一个接口的实现类进行管理和实例化创建假设我们有这样一个需求: 动物Animal,它有行为move()。有两个实现类cat和dog。为了统一管理和创建我们设计一个工厂模式。 同时两个子类有各自的行为,Cat有eatFish(),Dog有eat...
2019-05-04 14:54:37
187
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人