【Design pattern】利用动态代理技术实现设计模式-代理模式

[Design pattern]: 设计模式相关系列

什么时候可以使用代理模式?

需要在原有功能的基础上神不知鬼不觉的增加一些额外功能时,使用代理模式.

如何实现?

1,接口定义
1
2
3
4
5
6
package kooko.com.proxy;

public interface HelloWorld {
public void sayHelloWorld();
public void sayBye();
}
2,接口实现
1
2
3
4
5
6
7
8
9
10
11
12
package kooko.com.proxy;

public class HelloWorldImpl implements HelloWorld{

public void sayHelloWorld(){
System.out.println("say hello");
}

public void sayBye(){
System.out.println("say bye");
}
}
阅读更多

【Design pattern】设计模式系列(二十一)访问者模式

[Design pattern]: 设计模式相关系列

介绍

概念: 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
应用场景: 实体之间内部属性有差别,而且实体类型经常增加。他们的调用方式相同,但是调用的规则经常变化。
缺点: 实体的特殊内容访问类需要知道。

CODE

实体基类

1
2
3
4
5
package note.com.visitor;
public abstract class Food {

public abstract void show(IVisitor visitor);
}
阅读更多

【Design pattern】设计模式系列(二十)解释器模式

[Design pattern]: 设计模式相关系列

介绍

概念: 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
应用场景: 语言解释器(把我们能看懂的代码转换成了难看懂的机器码)
好处: 以简单的方式使用复杂的东西。

CODE

解释器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package note.com.interpreter;

/**
* 解释器
* @author lxz
*
*/
public class Interpreter {

public void say(String lag){
if("nh".equals(lag)){
System.out.println("你好");
}
}
}
阅读更多

【Design pattern】设计模式系列(十九)中介者模式

[Design pattern]: 设计模式相关系列

介绍

概念: 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
应用场景: 不同功能的模块之间调用关系复杂,耦合度高,不利于修改时使用。
好处: 降低耦合,模块独立。
坏处: 中介者业务复杂,不易维护。

CODE

定义模块抽象类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package note.com.mediator;

public abstract class Element {
public Mediator mediator = null;

public abstract void good();

public abstract void bad();

public Mediator getMediator() {
return mediator;
}

public void setMediator(Mediator mediator) {
this.mediator = mediator;
}

public abstract void changeGood();

public abstract void changeBad();
}
阅读更多

【Design pattern】设计模式系列(十八)策略模式

[Design pattern]: 设计模式相关系列

介绍

概念: 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
应用场景: 用户主动切换执行规则,比如 画图工具,不同的工具执行的事件效果不同. 压缩工具的格式,不同的格式执行不同的压缩算法.
好处: 扩展容易,不会破坏原有的结构,遵循开闭原则。
与状态模式的区别: 与状态模式的区别在于切换应对策略的主动权在用户,而状态模式的切换是在内部。

CODE

工具基类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package note.com.strategy;

/**
* 工具基类
* @author lxz
*
*/
public abstract class ATool {

public abstract void leftMouseClick();

public abstract void rightMouseClick();

public abstract void leftDoubleMouseClick();

}
阅读更多

【Design pattern】设计模式系列(十七)状态模式

[Design pattern]: 设计模式相关系列

介绍

首先明白两个单词:打开和关闭是同一个物体的两种状态,是需要经常互相切换的,不是没有关系的两个单词. let`s Go

概念: 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
应用场景: 关闭着的门–》打开的门–》关闭的门,自动的切换到下一个状态的可执行事件。
好处: 控制对象内部不同的状态执行不同的操作,按照状态流程执行。

典型的状态模式例子

CODE

状态接口

1
2
3
4
5
6
7
8
9
10
11
12
13
package note.com.state;

/**
* 状态接口定义
* @author lxz
*
*/
public interface State {
State changeState();
void doOne();
void doTwo();
void doThree();
}
阅读更多

【Design pattern】设计模式系列(十六)命令模式

[Design pattern]: 设计模式相关系列

介绍

概念: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
应用场景: 统一处理器的入口,由一个公共的入口来执行各种各样的请求
好处: 扩展方便,入口统一

CODE

处理器的接口定义

1
2
3
4
5
6
7
package note.com.Command;

public interface ICommand {

public void doICommand(String label);

}
阅读更多

【Design pattern】设计模式系列(十五)责任链模式

[Design pattern]: 设计模式相关系列

介绍

概念: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
应用场景: 经常增加处理场景的业务,比如处理零食商品的类,不断有新增的零食,就需要不断增加处理零食的方法,耦合度太高.为了降低耦合度使用职责链模式.
好处: 扩展灵活.结构清晰.

CODE

阅读更多

【Design pattern】设计模式系列(十四)观察者模式

[Design pattern]: 设计模式相关系列

介绍

概念: 定义对象间的一种一对多的依赖关系 ,当一个对象的状态发生改变时 , 所有依赖于它的对象都得到通知并被自动更新。
应用场景: 例如新闻订阅模式,邮件订阅等,客户端是观察者,新闻发布平台是被观察者,最重要的一点是被观察者控制着主动权. 注意区分的是:和时下的新闻APP并不相同,现在新闻APP采用的是客户端掌握了新闻更新的主动权.
好处: 一处改变,处处改变.

接来下实现一个游戏存档与读档的功能

CODE

在Java中有已经预定义好的发布-订阅模式的抽象类和接口,直接使用就好了.如果想要自己实现,源代码也很简单,仿写即可.JDK中定义的订阅者接口是java.util.Observer,发布者抽象类是java.util.Observable
下面编写实例

阅读更多

【Design pattern】设计模式系列(十三)备忘录模式

[Design pattern]: 设计模式相关系列

介绍

概念: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
应用场景: 需要保存某个对象的某个时间的状态,如游戏的暂停,存档,恢复功能. 如果把数据库与实体关联起来了,也可以说数据库是这个对象的备忘录.

阅读更多