设计模式
文章平均质量分 88
Unique-You
这个作者很懒,什么都没留下…
展开
-
策略模式strategy
定义:策略模式(strategy)定义了算法家族,分别封装起来,让它们之间可以互相替换。此模式让算法的变化不会影响到使用算法的客户。策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式的使用就是面向对象的继承和多态机制。结构: 策略模式是对算法的包装,是把使用算法的责...原创 2018-04-08 12:06:11 · 613 阅读 · 0 评论 -
单例模式
全局变量、non-local static变量(文件域的静态变量和类的静态成员变量)在main执行之前就已分配内存并初始化;local static 变量(局部静态变量)同样是在main前就已分配内存,第一次使用时初始化。这里的变量包含内置数据类型和自定义类型的对象。非局部静态变量一般在main执行之前的静态初始化过程中分配内存并初始化,可以认为是线程安全的;局部静态变量在编译时,编译器的实现一般...原创 2018-04-05 22:17:02 · 193 阅读 · 0 评论 -
桥接模式
定义:桥接模式(Bridge)是一种结构型设计模式。Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。实现指的是抽象类和它的派生类用来实现自己的对象。桥接模式核心意图就是把实现独立出来,让它们各自变化,使得每...原创 2018-04-12 19:56:58 · 572 阅读 · 0 评论 -
工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)
1、简单工厂模式简单工厂模式是属于创建型模式,又叫做静态工厂方法(static Factory Method)模式,简单工厂模式是由一个工厂对象决定创建出来哪一种产品类的实例.简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一类产品类(这些产品类继承自一个父类或接口)的实例。打个比方假设有一个工厂,他能生产出A、B两种产品。当客户需要产品的时候一定要告诉共产是哪种产品,是A还是B...原创 2018-04-06 15:42:57 · 2246 阅读 · 0 评论 -
命令模式
定义:将一个请求封装成一个对象,从而让你可用不同的请求把客户端进行参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。Command:声明执行操作的接口;ConcreteC...原创 2018-04-12 21:24:33 · 115 阅读 · 0 评论 -
职责链模式
定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系, 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。链上的对象逐个判断是否有能力处理该请求,如果能则就处理,如果不能,则传给链上的下一个对象。直到有一个对象处理它为止。职责链模式是行为模式。好处:1、接受者和发送者都没有对方的明确信息,且链中的对象也并不知道链的结构,结果是责任链可简化对象的相互连...原创 2018-04-13 09:33:09 · 136 阅读 · 0 评论 -
面向对象设计原则
1、单一职责原则就一个类而言,应该仅有一个引起它变化的原因。类只因一个原因而变化,这仿佛是一种新的类定义方式。当接触面向对象编程时,试图把一个类对比为一个事物,事物具备的功能都是这个类的操作。比如,一根尺子,既可以用来打学生手板,也可以用来丈量布匹。而在单一职责原理下,尺子的两个功能就是引起这个类变化的两个原因,就应该写成两个类。如果混在一起写,在修改一个职责的时候,可能会影响到另一个职责。当另一...原创 2018-04-06 22:07:36 · 133 阅读 · 0 评论 -
中介者模式
定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式属于行为型模式。主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。何时使用:多个类相互耦合,形成了网状结构。如何解决:将上述网状结构分离为星型结构。关键...原创 2018-04-13 10:59:51 · 118 阅读 · 0 评论 -
享元模式FlyWeight
1、定义运用共享技术,有效的支持大量细粒度的对象。程序中存在大量细粒度的对象,每次要使用时都必须创建一个新的对象,既影响了运行效率又增加了内存消耗。于是有了享元模式,享元模式提取出这些细粒度对象中间公共的状态(属性,我的理解),只生成一个实例对象,所有用到这些公共属性对象的地方,都指向这一个实例。很多类有一部分的属性是可以共享的,而不可共享的部分需要提取出来,通过参数传递来使用。内部状态:在享元对...原创 2018-04-07 12:27:39 · 273 阅读 · 1 评论 -
解释器模式
定义:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。何时使用:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。如何解决:构建语法树,定义终结符与非终结符。关键代码:构件环境类,包含解释器之外的一些全局信息,一般是 HashMap。应用实例:...原创 2018-04-13 15:47:54 · 183 阅读 · 0 评论 -
备忘录模式
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。是对象的行为模式。(备忘录模式可以理解为一种用于记录的模式(历史记录),平时使用的world,ppt等软件都有这种记录历史的功能,能够很好的切换到之前某个节点。 这种记录也可以和事务处理相结合,事务处理中牵扯到回滚功能,就可以使用备忘录模式。)优点: 1、备忘录模式可以把复杂...原创 2018-04-12 15:17:57 · 187 阅读 · 0 评论 -
状态模式
定义:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。状态模式是一种对象行为型模式。在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理。最直接的解决方案是将这些所有可能发生的情况全都考虑到。然后使用if... ellse语句来做状态判断来进行不同情况的处理。但是对复杂状态的判断就显得“力不从心了”。随着增加新的状态或者修改一个状体(if else(或switch ...原创 2018-04-12 10:33:39 · 170 阅读 · 0 评论 -
建造者模式
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建型的模式,肯定是创建对象等时候用的。工厂模式一般都是创建一个产品,注重的是把这个产品创建出来就行,只要创建出来,不关心这个产品的组成部分。从代码上看,工厂模式就是一个方法,用这个方法就能生产出产品。建造者模式也是创建一个产品,但是不仅要把这个产品创建出来,还要关系这个产品的组成细节, 组成过程。从代码上看,建造者模...原创 2018-04-11 21:23:15 · 138 阅读 · 0 评论 -
适配器模式Adapter
定义:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。分为类适配器模式和对象适配器模式。优点:1.屏蔽了具体的实现方式,实现了依赖倒转。2.可以把不统一的接口封装起来,使之成为统一的接口。3.把本来不方便适用的接口转换成统一的接口。使用场景:在以下各种情况下使用适配器模式:1.系统需要使用现有的类,而此类的接口不符合系统的需要...原创 2018-04-08 16:40:09 · 172 阅读 · 0 评论 -
迭代器模式Iterator
定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑用迭代器模式。同时需要对聚集有多种方式遍历时,可以考虑用迭代器模式。为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪 一项等统一接口。迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又...原创 2018-04-08 19:24:26 · 149 阅读 · 0 评论 -
观察者模式
定义:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象,在它的状态发生变化时,会通知所有的观察者,使它们自己能更新自己。动机:将一个系统设计成一系列相互协作的类有一个常见的副作用:需要维护相关对象之间的一致性。不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。观察者模式定义一种交互,即发布-订阅:一个对象当自身状态发生改变时,会发出通知,但是并不知道谁是他的...原创 2018-04-08 22:34:38 · 153 阅读 · 0 评论 -
组合模式
定义:将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。UML图:在Component中声明所有用来管理子对象的方法,其中包括Add、Remove等,这样实现Component接口的所有子类都具备了Add和Remove。这样做的好处就是叶节点和枝节点对于外界没有区别,它们具备 完全一致的行为 接口。但问题也很明显,因为Leaf类本身不具备Ad...原创 2018-04-09 11:30:10 · 182 阅读 · 0 评论 -
装饰模式
时常会遇到这样一种情况,我已经设计好了一个接口,并且也有几个实现类,但是这时我发现我设计的时候疏忽了,忘记了一些功能,或者后来需求变动要求加入一些功能,最简单的做法就是修改接口,添加函数,然后继承类中都相应的添加实现,这样做倒也没什么问题,但是如果这种变化来个好几次或者继承类非常多,那工作量可就大了。这时大神们就发明了装饰模式,在不修改现有接口和实现类的基础上实现功能或者状态的添加。装饰器模式是一...转载 2018-04-10 16:24:56 · 154 阅读 · 0 评论 -
代理模式
定义:为其他对象提供一种代理,以方便对这个对象的访问。 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。适用性: 在需要用比较通用和复杂的对象指针代替简单的的指针的时候,使用代理模式。 1、远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。 2、虚拟代...原创 2018-04-11 10:11:34 · 181 阅读 · 0 评论 -
原型模式
定义:利用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。适用性:用原型模式,就是为了创建对象。适合原型模式的最好选择如下:1.当我们的对象类型不是开始就能确定的,而这个类型是在运行期确定的话,那么我们通过这个类型的对象克隆出一个新的对象比较容易一些;2.有的时候,我们需要一个对象在某个状态下的副本,此时,我们使用原型模式是最好的选择;例如:一个对象,经过一段处理之后,其内部的状态发...原创 2018-04-11 14:29:04 · 163 阅读 · 0 评论 -
模板方法模式
定义:定义一个算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。实现方案:将算法/逻辑框架放在抽象基类中,并定义好实现接口,在子类中实现细节接口。注:策略模式,解决的是相同的问题,只是其方案是将各个接口封装为类,通过委托/组合方式解决问题UML图:AbstractClass是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法。这个模板方法一...原创 2018-04-11 16:01:42 · 107 阅读 · 0 评论 -
外观模式
定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得子系统更加容易使用。当一个系统很复杂时,系统提供给客户的是一个简单的对外接口,而把里面复杂的结构都封装了起来。客户只需使用这些简单接口就能使用这个系统,而不需要关注内部复杂的结构。外观模式完美体现了依赖倒置原则和迪米特法则。UML图:Facade:外观类,知道哪些子系统类负责处理请求,将客户端的请求代理给适当的子系...原创 2018-04-11 19:06:31 · 415 阅读 · 0 评论 -
访问者模式
定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。行为型设计模式。访问者模式是一种将数据操作与数据结构分离的设计模式。它的使用频率并不是很高,大多数情况下,你并不需要使用访问者模式,但是当你一旦需要使用它时,那你就是需要使用它了。基本想法:软件系统中拥有一个由许多对象构成的、比较稳定的对象结构,这些对象的类都拥有一个 accept 方...原创 2018-04-13 18:56:55 · 159 阅读 · 0 评论