
图解设计模式
stepMoreForever
step more
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Interpreter 模式
Interpreter(翻译员) 模式 设计模式的目的之一就是提高类的可复用性。可复用性是指不用做太大修改(甚至是不做任何修改)就可以在多种应用场景使用之前编写的类。 在Interpreter模式中,程序要解决的问题会被非常简单的“迷你语言”表述出来,即用“迷你语言”编写的“迷你程序”把具体的问题表述出来。迷你程序是无法单独工作的,我们还需要用Java语言编写一个负责“翻译”(interprete...原创 2019-12-30 08:39:58 · 265 阅读 · 0 评论 -
Command 模式
Command 模式 一个类在进行工作时会调用自己或是其他类的方法,虽然调用结果会反映在对象的状态中,但并不会留下工作的历史记录。 这时,如果我们有一个类,用来表示“请进行这项工作”的“命令”就会方便很多。每一项想做的工作就不再是“方法的调用”这种动态处理了,而是一个表示命令的类的实例,即可以用“物”来表示。要想管理工作的历史记录,只需管理这些实例的集合即可,而且还可以随时再次执行过去的命令,或是...原创 2019-12-28 16:02:59 · 985 阅读 · 0 评论 -
Proxy 模式
Proxy 模式 Proxy是“代理人”的意思,它指的是代替别人进行工作的人。当不一定需要本人亲自进行工作时,就可以寻找代理人去完成工作。但代理人毕竟只是代理人,能代替本人做的事情终究是有限的。因此,当代理人遇到无法自己解决的事情时就会去找本人解决该问题。 在面向对象编程中,“本人”和“代理人”都是对象。如果“本人”对象太忙了,有些工作无法自己亲自完成,就将其交给“代理人”对象负责。 示例程序 类...原创 2019-12-27 09:09:52 · 409 阅读 · 0 评论 -
Flyweight 模式
Flyweight 模式 Flyweight是“轻量级”的意思,指的是拳击比赛中选手体重最轻的等级。顾名思义,该设计模式的作用是为了让对象变“轻”。 关于Flyweight模式,一言以蔽之就是“通过尽量共享实例来避免new出实例”。 当需要某个实例时,并不总是通过new关键字来生成实例,而是尽量共用已经存在的实例。这就是Flyweight模式的核心内容。 ...原创 2019-12-26 08:55:33 · 1272 阅读 · 0 评论 -
State 模式
State模式 在State 模式中,我们用类来表示状态。State的意思是“状态”。在现实世界中,我们会考虑各种东西的“状态”,但是几乎不会将状态当作“东西”看待。因此,可能很难理解“用类来表示状态”的意思。 以类来表示状态后,我们就能通过切换类来方便地改变对象的状态。当需要增加新的状态时,如何修改代码这个问题也会很明确。 示例程序 金库报警系统功能简介 金库报警系统结构图 类和接口的一览表...原创 2019-12-19 09:36:27 · 424 阅读 · 0 评论 -
Memento 模式
Memento 模式 使用Memento模式可以实现应用程序的以下功能。 Undo(撤销) Redo(重做) History(历史记录) Snapshot(快照) Memento模式事先将某个时间点的实例的状态保存下来,之后在必要时,再将实例恢复至当时的状态。 示例程序 类的一览表 名字 说明 Memento 表示Gamer状态的类 Gamer 表示游戏主人公的类。它会生成...原创 2019-12-17 09:34:18 · 673 阅读 · 0 评论 -
Observer 模式
Observer 模式 Observer模式的意思是“进行观察的人”,也就是“观察者”的意思。 在Observer模式中,当观察对象的状态发生变化时,会通知给观察者。Observer模式适用于根据对象状态进行相应处理的场景。 示例程序 类和接口的一览表 名字 说明 Observer 表示观察者的接口 NumberGenerator 表示生成数值的对象的抽象类 RandomN...原创 2019-12-15 11:31:24 · 447 阅读 · 0 评论 -
Mediator模式
Mediator模式 Mediator的意思是“仲裁者”,“中介者”。一方面,当发生麻烦事情的时候,通知仲裁者;当发生涉及全体组员的事情时,也通知仲裁者。当仲裁者下达指示时,组员会立即执行。团队组员之间不再互相沟通并私自作出决定,而是发生任何事情都向仲裁者报告。另一方面,仲裁者站在整个团队的角度上对组员上报的事情做决定。这就是Mediator模式。 在Mediator模式中,“仲裁者”被称为Med...原创 2019-12-11 09:17:41 · 380 阅读 · 0 评论 -
Facade 模式
Facade 模式 使用Facade模式可以为互相关联在一起的错综复杂的类整理出高层接口(API)。其中的Facade角色可以让系统对外只有一个简单的接口(API)。而且,Facade角色还会考虑系统内部各个类之间的责任关系和依赖关系,按照正确的顺序调用各个类。 示例程序 示例程序类图 Database mport java.io.FileInputStream; import java.io....原创 2019-12-04 09:25:44 · 517 阅读 · 0 评论 -
Chain of Responsibility模式
Chain of Responsibility模式 将多个对象组成一条责任链,然后按照它们在职责链上的顺序一个一个地找出到底应该谁来负责处理。这种模式被称为Chain of Responsibility模式。我们一般称为“职责链”。 示例程序 示例程序类图 Trouble public class Trouble { // 问题编号 private int number; ...原创 2019-12-01 12:02:55 · 331 阅读 · 0 评论 -
Visitor模式
Visitor 模式 在Visitor 模式中,数据结构和处理被分离开。我们编写一个表示“访问者”的类来访问数据结构中的元素,并把对各元素的处理交给访问者类。这样,当需要增加新的处理时,我们只需要编写新的访问者,然后让数据结构可以接受访问者的访问即可。 示例程序 示例程序类图 Visitor public abstract class Visitor { public abstract...原创 2019-11-07 09:43:16 · 253 阅读 · 0 评论 -
《图解设计模式》读书笔记
《图解设计模式》这本书总体来说是一本讲解设计模式比较好的书籍。个人认为的主要原因主要是:图例比较生动,会将代码按照功能和角色进行分类,更加便于理解。 所以我将每一个章节,将关键部分进行摘录,便于自己日后的“温故而知新”。 Iterator 模式 Adapter 模式 Template Method 模式 Factory Method 模式 Singleton 模式 Prototype 模式 Bu...原创 2019-11-02 09:40:57 · 500 阅读 · 0 评论 -
Decorator 模式
Decorator 模式 不断地为对象添加装饰的设计模式被称为Decorator 模式。 示例程序类图 示例程序 Display public abstract class Display { public abstract int getColumns(); // 获取横向字符数 public abstract int getRows(); ...原创 2019-11-02 09:21:21 · 288 阅读 · 0 评论 -
Composite 模式
Composite 模式 能够使容器与内容具有一致性,创造出递归结构的模式就是Composite模式。 示例程序类图 示例程序 Entry public abstract class Entry { public abstract String getName(); // 获取名字 public abstract int...原创 2019-10-31 09:24:19 · 2957 阅读 · 0 评论 -
Strategy 模式
Strategy 模式 无论什么程序,其目的都是解决问题。而为了解决问题,我们又需要编写特定的算法。使用Strategy模式可以整体地替换算法的实现部分。能够整体地替换算法,能让我们轻松地以不同的方法去解决同一个问题,这种模式就是Strategy模式。 示例程序类图 示例程序 Hand public class Hand { public static final int HANDVAL...原创 2019-10-29 09:26:10 · 243 阅读 · 0 评论 -
Bridge 模式
Bridge 模式 Bridge模式的作用是在“类的功能层次结构”和“类的实现层次机构”之间搭建桥梁。 类的功能层次结构 类的实现层次结构 类的层次结构的两个作用 1.希望增加新的功能时 其实就是主要是继承,我们在子类中增加新的方法。这样就构成了一个小小的类层次结构。 也就是为了增加新功能而产生的层次结构。 父类具有基本功能 在子类中增加新的功能 像这种层次结构就称为“类的功能层次结构”。...原创 2019-10-26 09:54:26 · 317 阅读 · 0 评论 -
Abstract Factory模式
Abstract Factory模式 抽象工厂的工作是将“抽象零件”组装为“抽象产品”。 “抽象”指的是“不考虑具体怎样实现,而是仅关注接口(API)“的状态。 在Abstract Factory模式中将会出现抽象工厂,它会将抽象零件组装为抽象产品。也就是说,我们并不关心零件的具体实现,而是只关心接口(API)。我们仅使用该接口(API)将零件组装成为产品。 在Abstract Factory模式...原创 2019-10-24 21:03:46 · 265 阅读 · 0 评论 -
Builder 模式
Builder 模式简介 Builder 模式主要用来组装复杂的实例。 示例程序 示例程序类图 Builder类 public abstract class Builder { public abstract void makeTitle(String title); public abstract void makeString(String str); public ...原创 2019-10-23 09:20:08 · 1262 阅读 · 0 评论 -
Prototype 模式
原型模式的运用 Prototype模式——通过复制生成实例。 在Java中,我们可以使用new关键字指定类名来生成类的实例。像这样使用new来生成实例时,是必须指定类名的。但是,在开发过程中,有时候也会有“在不指定类名的前提下生成实例”的需求。例如,在以下的情况下,我们就不能根据类来生成实例,而需要根据现有的实例来生成新的实例。 1.对象种类繁多,无法将它们整合到一个类时 第一种情况是需要处理的对...原创 2019-10-22 09:34:27 · 386 阅读 · 0 评论 -
Singleton 模式
Singleton 模式中登场的角色 在Singleton模式中,只有Singleton这一个角色。 实例程序 线程安全的单例模式 public class Singleton { private static Singleton singleton = null; private Singleton(){ System.out.println("生成了一个实例")...原创 2019-10-21 08:29:14 · 349 阅读 · 0 评论 -
Factory Method 模式
Factory Method 模式 将实例的生成交给子类。 在Factory Method模式中,父类决定实例的生成方式,但并不决定所要生成的具体的类,具体的处理全部交给子类负责。 示例程序 示例程序类图 framework生成实例的框架; idcard加工处理。 Product类 public abstract class Product { public abstract voi...原创 2019-10-19 09:28:19 · 269 阅读 · 0 评论 -
Template Method模式
Template Method 模式 Template Method 模式是带有模板功能的模式,组成模板的方法被定义在父类中。由于这些方法是抽象方法,所以只查看父类的代码是无法知道这些方法最终会进行何种具体处理的,唯一能知道的就是父类是如何调用这些方法的。 实现上述这些抽象方法的是子类。在子类中实现了抽象方法也就决定了具体的处理。也就是说,只要在不同的子类中实现不同的具体处理,当父类的模版方法被调...原创 2019-10-18 09:29:09 · 209 阅读 · 0 评论 -
Adapter模式
Adapter模式分为以下两种 类适配器模式(使用继承的适配器) 对象适配器模式(使用委托的适配器) 继承的适配器 示例程序类图 Banner类 public class Banner { private String string; public Banner(String string) { this.string = string; } ...原创 2019-10-16 09:33:07 · 248 阅读 · 0 评论 -
Iterator模式
示例程序的类图 Aggregate接口 public interface Aggregate { Iterator iterator(); } Iterator接口 public interface Iterator { boolean hasNext(); Object next(); } Book类 public class Book { private ...原创 2019-10-14 09:22:40 · 187 阅读 · 0 评论 -
常用UML图学习
类图 abstract class ParentClass { int field1; static char field2; abstract void methodA(); double methodB() { return 0.0; } } class ChildClass extends ParentClass{ @Ov...原创 2019-09-24 17:02:20 · 292 阅读 · 0 评论