设计模式
文章平均质量分 76
嘿哈哈哈
人生就像一场演出,不到谢幕永远不知道自己有多精彩。
展开
-
设计模式:Iterator模式
Iterator模式——一个一个遍历首先,来看一段实现了Iterator模式的示例程序。这段程序的作用是将书(Book)放置到书架(BookSelf)中,并将书的名字按顺序显示出来。Aggregate接口public interface Aggregate { public abstract Iterator iterator();}Iterator接口...原创 2018-05-06 12:11:21 · 403 阅读 · 0 评论 -
设计模式:Flyweight模式
Flyweight模式——共享对象当在计算机中保存一个对象时,需要分配给其足够的内存空间。当程序中需要大量对象时,如果都是用new关键字来分配内存,将会消耗大量内存空间。使用Flyweight模式,可以通过尽量共享实例来避免使用new创建新实例。当需要某个实例时,并不总是通过new关键字来生成实例,而是尽量共用已经存在的实例。下面的实例程序是输出一些由普通字符构成的大型字符类,这些大型...原创 2018-06-21 11:36:14 · 397 阅读 · 0 评论 -
设计模式:Proxy模式
Proxy模式——只在必要时生成实例Proxy模式中,为主类创建了一个代理类,一些不一定需要主类完成的工作,可以由代理类来完成,只有代理类无法解决的任务才交由主类完成。下面的示例程序是一个打印机的模拟。由于打印机的初始化时间很长(假设设置为5秒钟),当一些不需要打印的工作来临时,交由打印机的代理类来完成,只有开始进入实际打印阶段后,才会生成打印机的实例。为了让主类和代理类具有一致性...原创 2018-06-21 11:36:18 · 399 阅读 · 0 评论 -
设计模式:Command模式
Command模式——命令也是类如果我们用一个类,来表示“进行某项工作”的命令,那么每一项工作就不在是“方法的调用”,而是一个表示命令的类的实例。如果想要管理工作的历史记录,只需要管理这些实例的集合即可,而且还可以随时再次执行过去的命令,或者是将过去的命令整合成一个新命令并执行。这就是Command模式。Command有时也被称作事件。当发生鼠标,键盘按下事件时,我们可以先将这些事件作成实...原创 2018-06-21 15:20:21 · 1656 阅读 · 1 评论 -
BNF(巴科斯范式)
BNF原创 2018-06-22 19:44:37 · 2595 阅读 · 0 评论 -
设计模式:Interpreter模式
Interpreter模式——语法规则也是类在Interpreter模式中,程序要解决的问题会被非常简单的“迷你语言”表示出来。但是“迷你语言”无法单独工作,还需要配备专门的解释器来解释并运行迷你程序。当需要解决的问题发生变化时,只需要很简单地修改迷你程序即可。下面的实例程序是控制一个点。迷你程序的语法是符合BNF的。关于BNF的详细解释参见链接。 ::= | ::= * ...原创 2018-06-22 20:01:38 · 1422 阅读 · 0 评论 -
设计模式总结
Iterator模式原创 2018-06-22 20:02:14 · 575 阅读 · 0 评论 -
设计模式:Facade模式
Facade模式——简单窗口当调用大型程序进行处理时,我们需要格外注意那些数量庞大的类之间错综复杂的关系。不过有一种更简单的做法,就是为这个大型程序提供一个“窗口”。这样,我们就不必单独地关注每个类了,只需简单地对“窗口”提出请求即可。这个“窗口”就是Facade模式。使用Facade模式可以为相互关联在一起的错综复杂的类整理出高层接口(API)。其中的Facade角色可以让系统对外只有一...原创 2018-06-09 11:18:01 · 5637 阅读 · 2 评论 -
设计模式:Mediator模式
Mediator模式——只有一个仲裁者想象一个乱糟糟的开发小组的工作状态,组员之间虽然在一起协同工作,但是意见难以统一,总是相互指挥,导致工作进度滞后。这时候,就需要一个仲裁者。所有的组员将自己的情况汇报给仲裁者,仲裁者会从团队的整体考虑,然后下达指令。仲裁者负责统一大家的意见。这样,团队的交流过程就变成了组员向仲裁者报告,仲裁者向组员下达指令的形式,而组员之间不再询问和沟通,这就是Media...原创 2018-06-09 11:18:33 · 5628 阅读 · 1 评论 -
设计模式:Observer模式
Observer模式——发送状态变化通知在Observer模式中,当观察对象发生变化时,会通知给观察者。Observer模式适用于根据对象状态进行相应处理的场景。下面的示例程序中,观察者将观察一个会生成随机数值的对象,并将它生成的数值结果显示出来,不过不同的观察者的显示方式不一样。类和接口的一览表 名字 说明 Observer 表示观察者的接口 ...原创 2018-06-09 23:59:53 · 305 阅读 · 0 评论 -
设计模式:Memento模式
Memento模式——保存对象状态我们在使用文本编辑器编写文件时,如果不小心删除了某句话,可以通过撤销功能将文件恢复到之前的状态。使用面向对象编程的方式实现撤销功能时,需要事先保存实例的相关状态信息。然后,在撤销时,还需要根据所保存的信息将实例恢复至原来的状态。要想恢复实例,需要一个自由访问实例内部结构的权限。但是,如果稍不注意,又可能会将依赖于实例内部结构的代码分散地编写在程序中的各...原创 2018-06-10 00:03:41 · 551 阅读 · 0 评论 -
设计模式:总结
创建型模式抽象工厂模式意图提供创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。适用性一个系统要独立于它的产品的创建、组合和表示时。一个系统要由多个产品系列中的一个来配置时。当你要强调一系列相关产品对象的设计以便进行联合使用时。当你提供一个产品类库,而只想显示它们的接口而不是实现时。结构参与者AbstractFactory声明一个创建抽象产品的操作接口。...原创 2019-06-10 22:34:08 · 870 阅读 · 1 评论 -
设计模式:考试总结
绪论设计模式:每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。一个模式有四个基本要素:模式名称(pattern name):一个助记名,它用一两个词来描述模式的问题、解决方案和效果。问题(problem):描述了应该在何时使用模式。不是基本的数据结构,也不是整个系统。不特定于域。解决方案(sol...原创 2019-06-16 19:36:16 · 952 阅读 · 0 评论 -
设计模式:State模式
State模式——用类表示状态在面向对象编程中,是用类表示对象的。也就是说,一个类对应着一个东西。这个东西可以存在于现实世界中,也可以不存在在现实世界中。在State 模式中,我们使用类来表示状态。以类来表示状态后,我们就能通过切换类来方便地改变对象的状态。当需要增加新的状态时,如何修改代码这个问题也会变得非常简单。下面的示例程序是一个金库报警系统。我们只是写出接口做一定地模拟,假设...原创 2018-06-21 11:36:08 · 488 阅读 · 0 评论 -
设计模式:Chain of Responsibility模式
Chain of Responsibility模式——职责链当外部请求程序进行某个处理,但程序暂时无法直接决定由哪个对象负责处理时,就需要 推卸职责。我们可以考虑**将多个对象组成一条职责链,然后按照它们在职责链上的顺序 一个一个地找出到底应该谁来负责**。使用Chain of Responsibility模式可以弱化“请求方”和“处理方”之间的关联关系,让 双方各自都成为可以独立复...原创 2018-05-15 22:41:55 · 380 阅读 · 0 评论 -
设计模式:Visitor模式
Visitor模式——访问数据结构并处理数据在数据结构中保存着许多元素,我们会对这些元素进行“处理”。这时,如通常的做法是把“处理”的代码 放到类中,但是当“处理”的方式有很多种时,这时,每增加一种处理,就需要去修改表示数据结构的类。在Visitor模式中国,**数据结构与处理被分离开来。我们编写一个表示“访问者”的类来访问数据结构中的 数据,并把对各元素的处理交给访问者类。这样,当需...原创 2018-05-15 22:42:04 · 1124 阅读 · 0 评论 -
设计模式:Adapter模式
Adapter模式——加个“适配器”以便于复用在程序世界中,经常存在现有的程序无法直接使用,需要做适当的变换之后才能使用的情况。这种用于填补“现有的程序”和“所需的程序”之间差异的设计模式就是Adapter模式。Adapter模式有以下两种:类适配器模式(使用继承的适配器)对象适配器模式(使用委托的适配器)这里的示例程序是一段会将输入的字符串显示为(原字符串)或是原字符串的程...原创 2018-05-06 12:11:31 · 490 阅读 · 0 评论 -
设计模式:Template Method模式
Template Method模式——将具体处理交给子类Template Method 模式是带有模板功能的模式,组成模板的方法被定义在父类中。由于这些方法是抽象方法,所以只查看父类的代码是无法知道这些方法最终会进行何种具体处理的,唯一能知道的就是父类是如何调用这些方法的。实现上述这些抽象方法的是子类。在子类中实现了抽象方法也就决定了具体的处理。也就是说,只要在不同的子类中实现不同的具体处...原创 2018-05-06 12:12:52 · 511 阅读 · 0 评论 -
设计模式:Factory Method模式
Factory Method模式——将实例的生成交给子类在Factory Method模式中,用Template模式来构建生成实例的工厂。在Factory Method模式中,父类决定实例的生成方式,但不决定所要生成的具体的类,具体的处理全部交给子类负责。这样就可以将生成实例的框架(framework)和负责生成实例的类解耦。下面这段实例程序的作用是制作身份证,它其中有5个类。生...原创 2018-05-06 12:13:02 · 416 阅读 · 0 评论 -
设计模式:Prototype模式
Prototype模式——通过复制生成实例在Java中,我们通常使用new关键字指定类名来生成类的实例。但是在开发过程中,我们有时也会遇到“在不指定类名的前提下生成实例”的需求。这里我们采用根据实例来生成新实例的Prototype模式。通过clone()方法的Cloneable接口的使用来创建出实例的副本。下面这段示例程序的功能是将字符串放入方框中显示出来或是加上下划线显示出来。...原创 2018-05-06 12:14:06 · 1650 阅读 · 0 评论 -
设计模式:Singleton模式
Singleton模式——只有一个实例当我们想在程序中表示某个东西只会存在一个时,就会有“只能创建一个实例”的需求。典型的例子有表示程序所运行的那台计算机的类,表示软件系统相关设置的类,以及表示视窗(window system)的类。想确保任何情况下都绝对只有一个实例想在程序上表现出“只存在一个实例”Singleton类只会生成一个实例。Singleton类定义了static字段...原创 2018-05-06 12:16:51 · 284 阅读 · 0 评论 -
设计模式:Builder模式
Builder模式——组装复杂的示例在组装一个复杂的物体时,我们需要首先建造组成这个物体的各个部分,然后分阶段将它们组装起来。这就是下面要讲到的用于组装具有复杂结构的实例的Builder模式。下面的示例程序是使用哪个Builder模式编写“文档”的程序。这里编写出的文档具有以下结构:含有一个标题含有几个字符串含有条目项目Builder类中定义了决定文档结构的方法,然后D...原创 2018-05-14 21:47:46 · 478 阅读 · 0 评论 -
设计模式:Abstract Factory模式
Abstract Factory模式——将关联的零件组装成产品关于工厂模式,参见链接(设计模式:Factory Method模式)在Abstract Factory模式中,不仅有“抽象工厂”,还有“抽象零件”和“抽象产品”。抽象工厂的工作是将“抽象零件”组装成“抽象产品”。我们并不关心零件的具体实现,而是只关心接口(API)。我们仅使用该接口(API)将零件组装成为产品。下面的示例程序...原创 2018-05-14 22:05:39 · 968 阅读 · 0 评论 -
设计模式:Bridge模式
Bridge模式——将类的功能层次与实现层次分离Bridge的意思为“桥梁”,所以Bridge模式的作用是把两样东西链接起来,它们分别是类的功能层次结构和类的实现层次结构。类的层次结构首先介绍一下类的层次结构的作用。一. 希望增加新的功能时假设现在有一个类Something。当我们想在Something中增加新功能时(想增加一个新的具体的方法时),我们会编写一个Someth...原创 2018-05-14 22:18:47 · 1400 阅读 · 0 评论 -
设计模式:Strategy模式
Strategy模式——整体地替换算法使用Strategy模式可以整体地替换算法的实现部分。能够整体地替换算法,能让我们以不同的算法去解决同一个问题。下面是一个示例程序。创建了两个不同的玩家使用不同的猜拳策略。第一种策略是“如果这局猜拳获胜,那么下一局也出一样的手势”(WinningStrategy),第二种策略是“根据上两局的手势从概率上计算出下一局的手势”(ProbStrategy)。...原创 2018-05-14 22:28:24 · 327 阅读 · 0 评论 -
设计模式:Composite模式
Composite模式——容器与内容的一致性类似计算机文件系统中的“文件”和“文件夹”的概念,虽然文件夹和文件是不同类型的对象,但是它们都可以被放入到文件夹中。文件夹和文件也被统称为“目录条目”(directory entry)。在目录条目中,文件夹和文件被当做是同一种对象看待(即一致性)。Composite模式就是用于创造出这样的结构的模式。能够使容器和内容具有一致性,创造出递归结构。...原创 2018-05-14 22:32:49 · 447 阅读 · 0 评论 -
设计模式:Decorator模式
Decorator模式——装饰边框与被装饰物的一致性与容器与内容的一致性相似。可以这样理解,假设有一块蛋糕,如果只涂上奶油,就是奶油蛋糕。如果加上草莓,就是草莓奶油蛋糕。如果在加上一块黑色巧克力板,上面用白色巧克力写上姓名,然后插上代表年龄的蜡烛,就变成了一块生日蛋糕。关于容器与内容的一致性,参见链接(设计模式:Composite模式)但是不论是蛋糕,奶油蛋糕,草莓奶油蛋糕还是生日蛋糕,它...原创 2018-05-15 22:41:48 · 366 阅读 · 0 评论 -
设计模式:考试总结(背版)
抽象工厂模式提供创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。生成器模式将一个复杂对象的构件与它的表示分离,使得同样的构建过程可以创建不同的表示。工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。单件模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。适配器模式...原创 2019-06-17 10:19:19 · 759 阅读 · 0 评论