设计模式
jazon@
芜湖
展开
-
装饰对象
装饰者模式:动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。装饰者和被装饰者有相同的超类型。你可以用一个或多个装饰者包装一个对象。既然装饰者和被装饰对象有相同的超类型,所以在任何需要原始对象(被包装)的场合都可以用装饰过的对象代替它。装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,以达到特定的目的。对象可以在任何时候被装饰,所以可以在运行时动...原创 2019-02-27 22:01:14 · 189 阅读 · 0 评论 -
桥接模式
桥接模式:通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变。以画图为例子,形状要变,颜色要变,即有两个维度:形状和颜色。如果使用继承的话,那么要为每种形状都提供各种颜色的版本。如果使用桥接模式,那么抽象的类层次就是形状抽象类,实现的类层次就是颜色,抽象类形状has-a颜色类(组合关系),这样子就是所说的放在两个不同类层次而使他们可以独立改变。headfirst设计模式中给的例子是电视机...原创 2019-03-10 19:00:29 · 141 阅读 · 0 评论 -
生成器(建造)模式
生成器模式:使用生成器模式封装一个产品的构造过程,并允许按步骤构造。建造模式的重心在于分离构建算法和具体的构造实现,从而使得构建算法可以重用。具体的构造实现可以很方便地扩展和切换,从而可以灵活地组合来构造出不同的产品对象。根据类图可知,客户定义了构造的步骤,builder.buildDay()会将build对象组合的plan对象给setDay()。最后客户调用get方法即可获得指定构造内容的p...原创 2019-03-10 22:11:07 · 259 阅读 · 0 评论 -
责任链模式
责任链模式:当你想要让一个以上的对象有机会能够处理某个请求的时候,就使用责任链模式。通过责任链,你可以为每个请求创建一个对象链。每个对象依序检查此请求,并对其进行处理,或将它传入给链中的下一个对象。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。successor...原创 2019-03-10 22:33:14 · 118 阅读 · 0 评论 -
享元(蝇亮)模式
享元模式:如果想让某个类的一个实例能用来提供许多"虚拟实例",就是用享元模式。享元模式以共享的方式高效地支持大量的细粒度对象。在JAVA语言中,String类型就是使用了享元模式。String对象是final类型,对象一旦创建就不可改变。在JAVA中字符串常量都是存在常量池中的,JAVA会确保一个字符串常量在常量池中只有一个拷贝。String a=“abc”,其中"abc"就是一个字符串常量。这...原创 2019-03-10 23:04:25 · 184 阅读 · 0 评论 -
模板方法模式
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。...原创 2019-03-07 22:29:16 · 98 阅读 · 0 评论 -
迭代器模式
迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。迭代器的作用是提供遍历方法,而与其实现无关。如ArrayList、LinkedList的迭代器。...原创 2019-03-07 22:41:25 · 88 阅读 · 0 评论 -
组合模式
组合模式:允许你将对象组合成树形结构来表现"整体/部分"层次结构,组合能让客户以一致的方式处理个别对象以及对象组合。例子:菜单有个这样的需求:午餐菜单里面有:炒饭,炒粉,甜品子菜单:布丁、双皮奶。这就涉及到菜单和菜单项,其中炒饭、炒饭是菜单项,甜品子菜单是子菜单。以菜单为例思考,这个模式能够创建一个树形结构,在同一个结构中处理嵌套菜单和菜单项组。通过将菜单和项放在相同的结构中,我们创建了一个"整...原创 2019-03-07 23:53:04 · 86 阅读 · 0 评论 -
解释器模式
解释器模式:为语言创建解释器。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。为了说明解释器模式的实现办法,这里给出一个最简单的文法和对应的解释器模式的实现,这就是模拟Java语言中对布尔表达式进行操作和求值。在这个语言中终结符是布尔变量,也就是常量true和false。非终结符表达式包含运算符and,or和not...原创 2019-03-11 23:43:41 · 123 阅读 · 0 评论 -
中介者模式
中介者模式:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。类型:行为类模式中介者模式的结构中介者模式又称为调停者模式,从类图中看,共分为3部分:抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。中介者实现类:从抽象中介者继承而来,实现抽...原创 2019-03-12 22:12:29 · 99 阅读 · 0 评论 -
复合模式
复合模式:结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。headfirst设计模式一个复杂的鸭子项目:多种鸭子,不同鸭子叫声、飞行、游泳方式不同 —— 策略模式鹅,需要加入几只普通的鹅 —— 适配器模式要统计鸭子叫声的次数 —— 装饰者模式统一产生鸭子 —— 工厂模式要管理一群鸭子 —— 组合模式(迭代器)追踪某个鸭子的行为 —— 观察者模式我们熟知的MVC架构...原创 2019-03-10 17:53:14 · 147 阅读 · 0 评论 -
代理模式
代理模式:为另一个对象提供一个替身或占位符以控制这个对象的访问。使用代理模式创建代表对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象,创建开销大的对象或需要安全控制的对象。例子:比如要请求远程服务器的一张图片,但是这个是个耗时的操作。那么可以这样子设计:创建一个代理对象,如果图片未加载出来就显示正在加载中,同时开启一个线程去加载图片,当图片加载完,通知Swing重新绘制图片。...原创 2019-03-10 11:33:34 · 71 阅读 · 0 评论 -
状态模式
状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。说明:这个模式将状态封装成独立的类,并将动作委托到代表当前状态的对象,我们知道行为会随着内部状态而改变。从使用该对象的客户看来,如果说你使用的对象能够完全改变它的行为,那么你会觉得,这个对象实际上是从别的类实例化而来的。例子:基于headfirst设计模式的例子糖果机有四个状态:SoldState,SoldOut...原创 2019-03-10 10:50:08 · 120 阅读 · 0 评论 -
工厂模式
简单工厂:定义了一个创建对象的工厂类,用于获取对象。工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。...原创 2019-02-28 22:08:17 · 96 阅读 · 0 评论 -
适配器模式
适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。例子:将火鸡包装成鸭子public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } public void...原创 2019-03-04 22:36:51 · 173 阅读 · 0 评论 -
策略模式
策略模式:它定义了算法组,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户端。例子:鸭子具有飞行、鸭叫的行为。不同类型的鸭子,其行为各不相同,如橡皮鸭不会飞,是吱吱叫。火箭鸭是利用火箭进行飞,是轰轰叫。如果用继承鸭子基类及实现fly接口、quackable接口的方式,那么第一个是代码量很多,需要为每个鸭子都实现fly、quack方法。另外飞行行为需要改变,比如所有飞行...原创 2019-02-25 23:31:21 · 81 阅读 · 0 评论 -
单例模式
有些对象其实我们只需要一个,比方说:线程池,缓存、对话框、注册表、打印机。事实上,这类对象只能由一个实例。如果制造出多个实例,就会导致许多问题产生。单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访...原创 2019-03-02 14:09:16 · 115 阅读 · 0 评论 -
外观模式
外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。原创 2019-03-05 21:19:34 · 138 阅读 · 0 评论 -
观察者模式
观察者模式:定义了对象之间一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。例子:气象站,当气象站的天气发生变化时,对应的各类显示器应该能把读数改变。实现方式:将显示器作为观察者注册到气象站主题中中,当气象站读数发生变化时,去通知已注册的显示器更新显示。设计原则:为了交互对象之间的松耦合而努力主题接口: public interface Subject{ ...原创 2019-02-27 00:08:28 · 115 阅读 · 0 评论 -
命令模式
命令模式:将"请求"封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。一个命令对象通过在特定接收者上绑定一组动作来封装一个请求。要达到这一点,命令对象将动作和接收者包装进对象中。这个对象只暴露出一个execute()方法,当此方法被调用的时候,接收者就会进行这些动作。从外面看来,只知道调用execute()解决的问题:在软件系统中,行为请求者与行为实现...原创 2019-03-03 23:44:10 · 92 阅读 · 0 评论 -
原型模式
原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。这就是选型模式的用意。原型模式的结构原型模式要求对象实现一个可以“克隆”自身的接口,这样就可以通过复制一个实例对象本身来创建一个新的实例。这样一来,通过原型实例创建新的对象,就不再需要关心这个实例本身的类型,只要实现了克隆自身的方法,就可以通过这个方法来获取新的对象,...转载 2019-03-13 23:26:55 · 117 阅读 · 0 评论 -
访问者模式
访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。当你想要为一个对象的组合增加新的能力,且封装并不重要时,就使用访问者模式。访问者模式适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。数据结构的每一个节点都可以接受一个访问者的调用,...转载 2019-03-14 00:11:59 · 296 阅读 · 0 评论 -
备忘录模式
备忘录模式: 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。 备忘录模式所涉...转载 2019-03-12 23:55:15 · 119 阅读 · 0 评论