
设计模式
文章平均质量分 79
feiyangxiaomi
这个作者很懒,什么都没留下…
展开
-
Structual设计--Decorator 模式
1.意图动态的给一个对象添加额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。2.别名包装器Wrapper。3.动机有时,我们希望给某个对象而不是整个类添加一些功能。例如,肯德基推出特价套餐,如果套餐1中有:汉堡和鸡腿和价格,套餐二中有:薯条和汉堡和价格,如果做继承类,而且是多继承明显不够灵活,那么就需要装饰类。4.适用性以下情况使用Decorator模式在不影响其他对象的情原创 2015-05-27 10:23:51 · 1081 阅读 · 0 评论 -
Behavioral模式之Mediator模式
1.意图用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。2.别名无3.动机面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连接。在最坏的情况下,每一个对象都知道其他所有对象。4.适用性以下情况使用Mediator模式:一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。原创 2015-06-25 19:44:50 · 763 阅读 · 0 评论 -
Structual设计--Composite模式
1.意图将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。2.别名无3.动机在绘图编辑器和图形捕捉系统这样的图形应用程序中,用户可以使用简单的组件创建复杂的图表。用户可以组合多个简单组件以形成一些较大的组件,这些组件又可以组合成更大的组件。一个简单的实现方法是为Text和Line这样的图元定义一些类,另外定义原创 2015-06-04 09:51:02 · 878 阅读 · 0 评论 -
Creational模式之Abstract Factory模式
1.意图提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。2.别名Kit3.动机考虑一个支持多种视感(look-and-feel)标准的用户界面工具包。不同的视感风格为诸如滚动条、窗口和按钮等用户界面”窗口组件“定义不同的外观和行为。为保证视感风格标准间的可移植性,一个应用不应该为一个特定的视感外观硬编码它的窗口组件。4.适用性以下情况使用Abstract Factory模式:一原创 2015-06-25 21:14:26 · 824 阅读 · 0 评论 -
Behavioral模式之Interpreter模式
1.意图给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。2.别名无3.动机如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各种实例表述为一种简单语句中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。4.适用性以下情况使用Interpreter模式: 当有一种语言需要解释执行,并且你可以将该语言中的句子表示为一个原创 2015-06-25 20:01:48 · 836 阅读 · 0 评论 -
Structual设计--Bridge模式
1.意图将抽象部分与它的实现部分分离,使他们都可以独立地变化。2.别名Handle/Body3.动机当一个抽象对象可能有多个实现时,通常用继承来协调它们。抽象类定义对该抽象的接口,而具体的子类则用不同方式加以实现。但是此方法有时不够灵活。继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立的进行修改、扩充和重用。4.适用性以下情况使用Bridge模式:你不希望在抽象和它的实原创 2015-06-08 09:38:10 · 1416 阅读 · 0 评论 -
Java设计模式
设计模式是思维具体化的一种方式,是思考如何解决问题的具体过程,设计模式是在解决问题过程中,一些良好思路的经验集成,最早期设计模式人们总要说道Gof的著作,它最早将经典的23中设计模式集合在一起说明,对后期学习设计模式,尤其是对从事件导向程序设计的人们起了莫大的影响。后来设计模式一次被广泛的应用的各种经验集成,甚至还有反模式(AntiPattern),反模式教导你如何避开一些常犯且似是而非的程序设计思原创 2015-06-25 20:20:43 · 896 阅读 · 0 评论 -
Creational模式之Prototype模式
1.意图用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。2.别名无3.动机类似于linux命令中的cat fileA > fileB,实现文件的拷贝。4.适用性以下情况使用Prototype模式:当要实例化的类是在运行时刻指定时,例如,通过动态装载。5.结构原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思原创 2015-06-30 09:30:31 · 1077 阅读 · 0 评论 -
Structual设计--Adapter模式
1.意图将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原来由于接口不兼容而不能在一起工作的那些类可以在一起工作。2.别名包装器Wrapper。3.动机有时,为复用而设计的工具箱类不能够被复用原因仅仅是因为它的接口与专业应用领域所需要的接口不匹配。具体场景可以描述为:基础功能类–》adapter专业接口–》专业调用,其中基础功能类可以理解为我们常见的jdk,也可以是一些sdk或者一些原创 2015-05-26 09:20:17 · 1149 阅读 · 0 评论 -
Creational模式之Singleton模式
1.意图保证一个类仅有一个实例,并提供一个访问它的全局访问点。 深入了解请点击2.别名无3.动机对于一些类来说,只有一个实例是很重要的。虽然系统中可以有许多打印机,但却只应该有一个打印机工作,只应该是有一个文件系统和窗口管理器。一个数字滤波器只能有一个A/D转换器。一个会计系统只能专用于一个公司。4.适用性以下情况使用Singleton模式:当类只能有一个实例而且客户可以从一个众所周知的访问点访原创 2015-06-25 21:33:28 · 613 阅读 · 0 评论 -
Creational模式之Builder模式
1.意图将一个复杂对象的构建与它表示分离,使得同样的构建过程可以创建不同的表示。 查看更多请点击2.别名无3.动机一个RTF(Rich Text Format)文档交换格式的阅读器应能将RTF转换为多种正文格式。该阅读器可以讲RTF文档转化成不同ASCII文本或转换成一个能以交互方式编辑的正文窗口组件。但问题在于可能转换的数目是无限的。因此要能够很容易实现新的转换的增加,同时却不改变RTF阅读器。原创 2015-06-29 09:53:56 · 1095 阅读 · 0 评论 -
Behavioral模式之State模式
1.意图允许一个对象再其内部状态改变时,改变它的行为。对象看起来似乎修改了它的类。2.别名状态对象(Objects for States)3.动机考虑一个表示网络连接的类TCPConnection。一个TCPConnection对象的状态处于若干不同状态之一:连接已建立(Established)、正在监听(Listenling),连接已关闭(Closed)。当一个TCPConnection对象收到其原创 2015-06-25 17:52:45 · 813 阅读 · 0 评论 -
Behavioral模式之Visitor模式
1.意图表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。2.别名无3.动机考虑一个编译器,他将源程序表示为一个抽象语法树。该编译器需要在抽象语法上实施某些操作以进行“静态语义”分析,例如检查是否所有的变量都已经被定义了。他也需要生成代码。因为它可能要定义许多操作以进行代码检查、代码优化、流程分析、检查变量是否在使用前被赋初值,等等。此外,还可原创 2015-06-25 18:22:25 · 1147 阅读 · 0 评论 -
Creational模式之Factory Method模式
1.意图定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。2.别名虚构造器(Virtrual Constructor)3.动机框架使用抽象类定义和维护对象之间的关系。这些对象的创建通常也有框架负责。4.适用性以下情况使用Factory Method模式:当一个类不知道它所必需创建的对象的类的时候。当一个类希望由它的子类来指定它所创建的原创 2015-06-25 21:00:41 · 784 阅读 · 0 评论 -
Structual设计--Proxy 模式
1.意图为其他对象提供一种代理以控制对这个对象的访问。2.别名Surrogate3.动机对一个对象进行访问控制的一个愿意是为了只有在我们确实需要这个对象时才对他进行创建和初始化。譬如手机上加载图片,每一个屏幕的大小是有限定的,我们无需每次把所有图片都加载上,只有在需要展示的时候才对图片进行创建和初始化。4.适用性在需要用比较通用和复杂的对象指针代理简单的指针的时候,使用Proxy。下面是一些可以使用原创 2015-05-28 10:21:46 · 1323 阅读 · 0 评论 -
Behavioral模式之Strategy模式
1.意图定义一系列的算法,把他们一个个封装起来,并使它们可相互替换。本模式使得算法可以独立与使用它的客户而变化。2.别名政策(Policy)3.动机有许多算法可对一个正文流进行分析。将这些算法硬编进使用它们的类中是不可取的。其原因如下:需要换行功能的客户程序如果直接包含换行算法代码的话将会变得复杂,这使得客户程序庞大并且难以维护,尤其当其需要支持多种换行算法时问题更加严重。不同的时候需要不同的算原创 2015-06-19 09:53:17 · 916 阅读 · 0 评论 -
Structual设计--Facade模式
1.意图为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层的接口,这个接口使得这一子系统更加容易使用。2.别名无3.动机将一个系统划成为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小。达到该目标的途径之一是引入一个外观(facade)对象,它为子系统中较一般的设施提供了一个单一而简单的界面。例如算法库有很多算法类,我们在使用的时候分原创 2015-06-02 09:52:33 · 960 阅读 · 0 评论 -
Behavioral模式之template Method模式
1.意图定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。2.别名暂无3.动机考虑一个提供Application和Document类的应用框架。Application类负责打开一个已有的以外部形式存储的文档,如一个文件。一旦一个文档中的信息重该文件中读出后,它就由一个Document对象表示。4.适用性以原创 2015-06-23 13:55:23 · 736 阅读 · 0 评论 -
Behavioral模式之Observer模式
1.意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。2.别名依赖(dependents),发布-订阅(Publish-Subscribe)3.动机将一个系统分割成一系列相互协作的类,有一个常见的副作用:需要维护相关对象间的一致性。我们不希望为了维持一致性而使得个类之间紧密耦合,因此这样降低了他们的可重用性。4.适用性以下情况使用ObServ原创 2015-06-23 14:16:00 · 802 阅读 · 0 评论 -
Behavioral模式之Chain of Responsibility模式
1.意图使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递改请求,知道有一个对象处理它为止。2.别名无3.动机考虑一个图形用户界面中的上下文有关的帮助机制。用户在界面的任一部分上点击就可以以得到帮助信息,所提供的帮助依赖于点击的是界面的哪一部分以及其上下文。4.适用性以下情况使用Responsibility模式:有多个的对象可以处理一个请原创 2015-06-23 15:35:13 · 1036 阅读 · 0 评论 -
Behavioral模式之Command模式
1.意图将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。2.别名动作(Action),事务(Transaction)3.动机有时必须向某对象提出请求,当但并不知道关于被请求的操作或请求的接收者任何信息。例如,用户界面工具箱包括按钮和菜单这样的对象,它的执行请求响应用户输入。但工具箱不能显式的在按钮或菜单中实现该请求,因为只有使用工具箱原创 2015-06-23 16:21:57 · 790 阅读 · 0 评论 -
Behavioral模式之Iterator模式
1.意图提供一种方法顺序访问一个集合对象中各个元素,而不需要暴露该对象的内部表示。2.别名Cursor(游标)3.动机一个聚合对象,如列表(list),应该提供一种方法来让别人可以访问它的元素,而又不需要暴露它的内部结构。数据库中最常用的Iterator模式。4.适用性以下情况使用Iterator模式:访问一个聚合对象的内容而无需暴露它的内部表示。支持对聚合对象的多种遍历。为遍历不同的聚合结构原创 2015-06-23 15:13:28 · 734 阅读 · 0 评论 -
Structual设计--Flyweight模式
1.意图运用共享技术有效地支持大量细粒度的对象。2.别名无3.动机有些应用程序得意于在其整个设计过程中采用对象技术,但简单化的实现代价极大。如我们在使用word的时候,如果设置正文字体为:text.setFont(new Font(“細明體”, Style.BOLD, 12));每一个文字我们都需要这样设置,内存太大,而且也非常难记,稍有不注意就会出错。所以通常并不是对每个字符都用一个单独的对象去表原创 2015-06-03 09:33:59 · 1071 阅读 · 0 评论 -
Behavioral模式之Memento模式
1.意图在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。2.别名Token3.动机有时候有必要记录一个对象的内部状态。为了允许用户取消不确定的操作或从错误中恢复过来,需要实现检查点和取消机制,而要实现这些机制,你必须事先将状态信息保存在某处,这样才能是对象恢复到他们先前的状态。4.适用性以下情况使用Memento模式:必需保存一原创 2015-06-25 17:33:56 · 786 阅读 · 1 评论 -
Structual设计--总结
1.结构型模式的讨论我们可以注意到了结构型模式之间的相似性,尤其是他们的参与者与协作之间的相似性。这可能是因为结构型模型依赖于同一个很小的语言机制集合构造代码和对象:但继承和多继承机制用于基于类的模型,而对象组合机制用于对象模型。但是这些相似性掩盖了这些模型的不同意图。2.Adapter和Bridge模式Adapter模型和Bridge模型具有一些共同的特征。他们都给另一个对象提供了一定程度上的间接原创 2015-06-15 09:58:02 · 1428 阅读 · 0 评论