随笔分类 - 设计模式
完
摘要:在Interpreter模式中,程序要解决的问题会被用非常简单的“迷你语言”表述出来,即用“迷你语言”编写的“迷你程序”把具体的问题表述出来。迷你程序是无法单独工作的,还需要用java语言编写一个负责“翻译”的程序。翻译程序会理解迷你语言,并解释和运行迷你程序。这段翻译程序也被称为解释器。这样,当需
阅读全文
摘要:一个类在进行工作时会调用自己或者是其他类的方法,虽然调用结果会反映在对象的状态中,但并不会留下工作的历史记录。 这时,如果我们有一个类,用来表示“请进行这项工作”的“命令”就会方便很多。每一项想做的工作就不再是“方法的调用”这种动态处理了,而是一个表示命令的类的实例,即可以用“物”表示。要想管理工作
阅读全文
摘要:在面向对象编程中,“本人”和“代理人”都是对象。如果“本人”对象太忙了,有些工作无法自己亲自完成,就将其交给“代理人”对象负责。 示例程序的类图。 示例程序的时序图。从这个时序图可以看出,直到调用print方法,开始进入实际打印阶段后,PrinterProxy类才会生成Printer类的实例。 Pr
阅读全文
摘要:当使用new关键字生成类的实例时,需要给其分配足够的内存空间。当程序中需要大量对象时,如果都是用new关键字来分配内存,将会消耗大量内存空间。Flyweight模式就是尽量避免new出实例,而是通过尽量共用已经存在的实例。 示例程序类图。这个示例程序要实现的就是给定传统的普通数字字符可以得到对应数字
阅读全文
摘要:在面向对象编程中,是用类表示对象的。也就是说,程序的设计者需要考虑用类来表示什么东西。类对应的东西可能存在于真实世界中,也可能不存在于真实世界中。对于后者,可能有人看到代码后会感到吃惊:这些东西居然也可以是类啊。 在State模式中,用类来表示状态。用类来表示状态后,就能通过切换类方便地改变对象的状
阅读全文
摘要:在使用面向对象编程的方式实现撤销功能时,需要事先保存实例的相关状态信息。然后,在撤销时,还需要根据所保存的信息将实例恢复至原来的状态。 要想恢复实例,需要一个可以自由访问实例内部结构的权限。但是,如果稍有不注意,又可能会将依赖于实例内部结构的代码分散地编写在程序的各种地方,导致程序变得难以维护。这种
阅读全文
摘要:在Observer模式中,当观察对象的状态发生变化时,会通知给观察者。Observer模式适用于根据对象状态进行相应处理的场景。 首先看一下示例程序的视图。 然后用实际代码来理解这种设计模式。 Observer接口是用来表示“观察者”的接口。具体的观察者会实现这个接口。用于生成数值的NumberGe
阅读全文
摘要:在实际的工作小组的交流过程是,组员向仲裁者报告,仲裁者向组员下达指示,组员之间不再互相询问和指示。Mediator模式是指,当发生麻烦事情的时候,通知仲裁者;当发生涉及全体组员的事情时,也通知仲裁者。当仲裁者下达指示时,组员会立即执行。团队组员之间不再互相沟通并私自做出决定,而是发生任何事情都向仲裁
阅读全文
摘要:Facade模式可以为相互关联在一起的错综复杂的类整理出高层接口,可以让系统对外只有一个简单的接口,而且还会考虑到系统内部各个类之间的责任关系和依赖关系,按照正常的顺序调用各个类。 还是先看一下示例程序的类图。 接下来根据示例程序代码理解一下Facade模式。 Database类就一个getProp
阅读全文
摘要:Chain of Responsibility模式就是当外部请求程序进行某个处理,但程序暂时无法直接决定由哪个对象负责处理时,就需要推卸责任。也就是说,当一个人被要求做什么事时,如果他可以做就自己做,如果不能做就转给下一个人,以此类推。 下面是示例程序的类图。 下面是示例程序代码。 Trouble类
阅读全文
摘要:Visitor模式可以用来把数据结构与处理分离开。通俗来说就是编写一个访问者类来访问数据结构中的元素,并把对各元素的处理交给访问者类。这样,当需要增加新的处理时,只需要编写新的访问者,然后让数据结构可以接受访问者的访问即可。 下面先看示例程序的类图。 在示例程序中,使用Composite模式中用到了
阅读全文
摘要:Composite模式模式能够使容器与内容具有一致性,创造出递归结构。有时,与将文件夹和文件都作为目录条目看待一样,将容器和内容作为同一种东西看待,可以帮助我们方便地处理问题。在容器中既可以放入内容,也可以放入小容器,然后在那个小容器中,又可以放入更小的容器。这样,就形成了容器结构、递归结构。 示例
阅读全文
摘要:Decorator模式就是不断地为对象添加装饰的设计模式。以蛋糕为例,程序中的对象就相当于蛋糕,然后像不断地装饰蛋糕一样地不断地对其增加功能,它就变成了使用目的更加明确的对象。 首先看示例程序的类图。 然后看示例程序代码。 Display类是可以显示多行字符串的抽象类。getColumns方法用来获
阅读全文
摘要:Strategy模式,就是用来整体地替换算法,可以轻松地以不同的算法解决同一个问题。 还是根据一个示例程序来理解这种设计模式吧。先看一下示例程序的类图。 然后看示例程序代码。 Hand类是用来表示猜拳中“手势”的类,首先创建了Hand类的实例,并将它们保存在hand数组中。getHand方法的作用是
阅读全文
摘要:Bridge模式就是将类的功能层次结构和类的实现层次结构连接起来。 类的功能层次结构就是根据实际非抽象类来说的,也就是父类具有基本功能,然后在子类中增加新功能。用于增加新功能。 类的实现层次结构就是根据抽象类来说的,也就是父类通过声明抽象方法来定义接口,子类通过实现具体方法来实现接口。用于增加新实现
阅读全文
摘要:抽象工厂的工作是将“抽象零件”组装为“抽象产品”。在抽象工厂模式中将会出现抽象工厂,它会将抽象零件组装为抽象产品。也就是说,我们并不关心零件的具体实现,而是只关心接口。我们仅适用该接口将零件组装起来成为产品。 示例程序的功能是将带有层次关系的链接的集合制作成HTML文件。 Item类是Link类和T
阅读全文
摘要:Builder模式,从这个名字我们可以看出来,这种设计模式就是用于组装具有复杂结构的实例的。 下面还是以一个实例程序来解释这种设计模式,先看实例程序的类图。 这里为了调试方便,只实现其中一个功能TextBuilder,剩下的HTMLBuilder可自行编写。 然后是实例程序代码。 Builder类是
阅读全文
摘要:Prototype模式就是不根据类来生成实例,而是根据实例来生成新实例。至于为什么不能根据类来生成实例,在最后会讲到。 还是根据实例程序来理解这种设计模式吧。 下面是实例代码。 Product接口是复制功能的接口。Product接口继承了Cloneable接口,也就是说实现了Cloneable接口的
阅读全文
摘要:Singleton模式就是确保只生成一个实例的模式。这里有两个意思,即想确保任何情况下都绝对只有一个实例和想在程序上表现出“只存在一个实例”。 下面通过一个实例来说明这种设计模式。 Singleton类只会生成一个实例。主要方法是在声明实例域时,使用static将singleton初始化为Singl
阅读全文
摘要:简单来说,用Template Method模式来构建生成实例的工厂,就是Factory Method模式。在这个模式中,父类决定实例的生成方式,但不决定所要生成的具体的类,具体的处理全部交给子类负责。这样就可以将生成实例的框架和实际负责生成实例的类解耦。 下面的示例中,framework包是生成实例
阅读全文

浙公网安备 33010602011771号