设计模式
文章平均质量分 83
设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
钟渊
持续学习
展开
-
单例模式和多例模式的总结
学习交流关注微信公众号:钟渊博客今天开始学习设计模式之单例和多例单例模式的关键有两点:1.构造方法为私有,这样外界就不能随意调用。2.get的方法为静态,由类直接调用多例模式(Multiton)1、多例类可以有多个实例2、多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例。一、单例模式和多例模式说明:1.单例模式和多...原创 2016-07-12 09:05:48 · 29927 阅读 · 3 评论 -
简单工厂模式
学习交流关注微信公众号:钟渊博客 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的UML图: 简单工厂模式中包含的角色及其相应的职责如下: 工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需...原创 2016-07-13 09:40:49 · 560 阅读 · 0 评论 -
工厂方法模式
工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品。工厂方法模式(Factory Method):定义一个用于创建对象的接口IFactory,在具体的ConcreteFac原创 2016-07-14 09:03:34 · 545 阅读 · 0 评论 -
抽象工厂模式
概述: 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象原创 2016-07-15 14:10:35 · 480 阅读 · 0 评论 -
建造者模式
一: 建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式通常包括下面几个角色:1. builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。2. ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化原创 2016-07-18 11:19:11 · 438 阅读 · 0 评论 -
原型模式
概念:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。类型:创建类模式类图: 原理图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知原创 2016-07-19 09:19:50 · 473 阅读 · 0 评论 -
适配器模式
概念适配器模式能让原本互相接口不能匹配的类变得能够一起工作。也就是说,适配器将一个类的接口变成客户端所期望的另外一个接口。 适配器模式有两种类型:类的适配器模式和对象的适配器模式。一、类的适配器模式类图:也就是说:适配器Adapter将被适配的对象的接口转换成客户端需要的Target所规定的接口。通过适配器,客户端可以将Adaptee类当作一个Targe原创 2016-07-20 08:58:01 · 629 阅读 · 0 评论 -
装饰器模式
一、概念: 装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的设计中,而我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。装饰...原创 2016-07-21 08:56:32 · 469 阅读 · 0 评论 -
代理模式
一、代理模式作用 为其它对象提供一种代理以控制对这个对象的访问。在某些情况下,一 个客户不想直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。代理模式具有的角色:抽象角色:声明真实对象和代理对象的共同接口代理角色:代理对象内部包含有真实角色的引用,从而可以操作真实角色,同时代理对象 与真实对象有相同的接口,能在任何时候代替真实对象,同时代理对象可以在执行原创 2016-07-22 14:21:44 · 388 阅读 · 0 评论 -
外观(Facade)模式
一、什么是外观模式 所谓外观模式就是要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行交互。外观模式提供一个高层次的接口使得子系统更易于使用。二、外观模式具有的角色 1、外观角色:客户端可以调用这个角色的方法。该角色知晓相关的子系统的功能和责任。 2、子系统角色:可以同时有一个或者多个子系统,每一个子系统都不是一个单独的类,而是一个类的集合。每一个子系统都可原创 2016-07-25 09:27:57 · 398 阅读 · 0 评论 -
桥接模式
1、什么是桥接模式? 桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。使用桥接模式就是把变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。 意图: 将抽象部分与实现部分分离,使它们都可以原创 2016-07-26 09:07:16 · 348 阅读 · 0 评论 -
组合模式
一、什么是组合模式? 将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 二、角色: 1.Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component 子部件。 2.Leaf 在组合中表示叶子原创 2016-07-27 16:49:23 · 490 阅读 · 0 评论 -
享元模式
一、什么是享元模式? 在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。采用一个共享来避免大量拥有相同内容对象的开销。这种开销中最常见、直观的就是内存的损耗。享元模式以共享的方式高效的支持大量的细粒度对象。二、类图和角色 单纯享元模式1) 抽象享元角色:为具体享元角色规定了必须实现的方法,而外蕴状态就是以参数的形式通过此方原创 2016-07-28 10:59:26 · 375 阅读 · 0 评论 -
策略模式(Strategy Pattern)
一、什么是策略模式? 策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。二、策略模式的结构策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的原创 2016-07-29 16:35:57 · 352 阅读 · 0 评论 -
模板方法模式
一、什么是模板方法模式? 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。 涉及到的角色: 抽象类(AbstractClass):实现了模板方法,定义了算法的骨原创 2016-08-01 09:22:48 · 421 阅读 · 0 评论 -
观察者模式Observer
一、什么是观察者模式?观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新原创 2016-08-02 09:13:12 · 496 阅读 · 0 评论 -
迭代子模式
一、什么是迭代子模式?迭代子(Iterator)模式又叫游标(Cursor)模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴漏聚集的内部表象。二、迭代子模式的结构迭代子模式有两种实现方式,分别是白箱聚集与外禀迭代子和黑箱聚集与内禀迭代子。(1)白箱聚集与外禀迭代子如果一个聚集的接口提供了可以用来修改聚集元素的方法,这个接口就是所谓的宽接口。如原创 2016-08-04 09:16:39 · 805 阅读 · 1 评论 -
责任链模式
一、什么是责任链模式?责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。原创 2016-08-05 17:43:20 · 357 阅读 · 0 评论 -
命令模式(Command Pattern)
一、什么是命令模式?概念:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或记录日志,以及支持可撤销的操作动机:将”发出请求的对象”和”接收与执行这些请求的对象”分隔开来。结构图:Command类:是一个抽象类,类中对需要执行的命令进行声明,一般来说要对外公布一个execute方法用来执行命令。ConcreteCommand类:Command类的实现类,原创 2016-08-08 10:41:24 · 463 阅读 · 0 评论 -
备忘录模式
一、什么是备忘录模式?备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。备原创 2016-08-09 16:30:02 · 459 阅读 · 0 评论 -
状态模式
一、什么是状态模式? 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。结构图:具有的角色:环境(Context)角色,也成上下文:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个具体状态类的实例给出此环境对象的现有状态。抽象状态(State)角色:定义一个接口,用以封装环境(Context)原创 2016-08-10 14:35:07 · 361 阅读 · 0 评论 -
访问者模式
一、什么是访问者模式?表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。从定义可以看出结构对象是使用访问者模式必备条件,而且这个结构对象必须存在遍历自身各个对象的方法。这便类似于Java语言当中的collection概念了。涉及角色 : 1.IVisitor 抽象访问者角色,为该对象结构中具体元素角色声明一个访问操作接原创 2016-08-11 14:13:21 · 361 阅读 · 0 评论 -
中介者模式
一、什么是中介者模式?用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。具有的角色:Mediator: 抽象中介者。定义了同事对象到中介者对象之间的接口。ConcreteMediator: 具体中介者。实现抽象中介者的方法,它需要知道所有的具体同事类,同时需要从具体的同事类那里接收信息,并且向具体的同事类原创 2016-08-12 18:24:50 · 371 阅读 · 0 评论 -
解释器模式
一、什么是解释器模式?给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。类图:AbstractExpression 抽象解释器 具体的解释任务由各个实现类完成,具体的解释器分别由TerminalExpression和NonterminalExpression完成。TerminalExpression终结原创 2016-08-16 09:03:34 · 354 阅读 · 0 评论