LXZ的原创知识库

记录,思考,成长,回忆


  • 首页

  • 分类

  • 归档

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

发表于 2015-06-14 | 分类于 Design pattern

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

介绍

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

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

CODE

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

阅读全文 »

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

发表于 2015-06-13 | 分类于 Design pattern

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

介绍

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

阅读全文 »

【Design pattern】设计模式系列(十二)模板模式

发表于 2015-06-12 | 分类于 Design pattern

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

介绍

概念: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
应用场景: 由模板定义统一的公共逻辑,公共入口,子类定义不同的实现.好处:统一了公共部分,父类(模板)控制了子类的流程,子类只能定义规定内的逻辑.

阅读全文 »

【Design pattern】设计模式系列(十一)享元模式

发表于 2015-06-11 | 分类于 Design pattern

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

介绍

概念: 运用共享技术有效地支持大量细粒度的对象。
应用场景: 项目中某个类需要产生大量的对象,其中对象中的属性创建占用了大量的内存,如果这些属性对象可以被公用,那么可以利用享元模式把他们指向同一个地址.

这让我想起了字符串常量池的做法.
那么我们就用例子模仿一个字符串存储的逻辑.

CODE

自创字符串类

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

/**
* 自定义String类
* @author lxz
*
*/
public class MyString {
private String name = null;

public MyString(String name){
this.name = name;
}
public String getName() {
return name;
}

}
阅读全文 »

【Design pattern】设计模式系列(十)桥接模式

发表于 2015-06-10 | 分类于 Design pattern

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

介绍

意图: 将抽象部分与它的实现部分分离,使它们都可以独立地变化。
使用场景: 当一个接口中有多个方法定义,它的方法有多种有不同的实现,为了避免在子类中重复的定义相同的方法.

CODE

剥离功能1接口

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

/**
* 颜色接口
* @author lxz
*
*/
public interface IColour {

public void buildColour();

}
阅读全文 »

【Design pattern】设计模式系列(九)装饰模式

发表于 2015-06-09 | 分类于 Design pattern

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

介绍

意图: 动态地给一个对象添加一些额外的职责。就增加功能来说, D e c o r a t o r模式相比生成子类更为灵活。
使用场景: 处理规则可以任意组装的时候
结构图:

CODE

过滤功能接口

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

public interface Deal {
public void deal();

public String read();
}
阅读全文 »

【Design pattern】设计模式系列(八)组合模式

发表于 2015-06-08 | 分类于 Design pattern

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

介绍

意图: 将对象组合成树形结构以表示“部分 -整体”的层次结构。 C o m p o s i t e使得用户对单个对象和组合对象的使用具有一致性。
适用性: 1,你想表示对象的部分 -整体层次结构。 2,你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
应用场景 :树形结构,从树顶控制整个树的操作.

CODE

政府接口

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

/**
* 政府接口
* @author lxz
*
*/
public interface Government{

public void build(String str1);

public boolean add(Government gov);

public boolean delete(Government gov);
}
阅读全文 »

【Design pattern】设计模式系列(七)适配器模式

发表于 2015-06-07 | 分类于 Design pattern

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

介绍

意图: 将一个类的接口转换成客户希望的另外一个接口。 A d a p t e r模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
别名: 包装器 Wrapper
动机: 有时,为复用而设计的工具箱类不能够被复用的原因仅仅是因为它的接口与专业应用领域所需要的接口不匹配。
应用场景: 需要使用到老的类,但是不符合新接口规则的时候,就是适配器出场的时候了

CODE

老的类

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

public class OldActionA {
public void start(){
System.out.println("start开始工作");
}
}
阅读全文 »

【Design pattern】设计模式系列(六)代理模式

发表于 2015-06-06 | 分类于 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
package note.com.proxy;

/**
* 可执行动作
* @author lxz
*
*/
public class Action {

public void doOne(){
System.out.println("One");
}
public void doTwo(){
System.out.println("Two");
}
public void doThree(){
System.out.println("Three");
}

}
阅读全文 »

【Design pattern】设计模式系列(五)外观模式

发表于 2015-06-05 | 分类于 Design pattern

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

介绍

概念: 为子系统中的一组接口提供一个一致的界面, Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
理解: 某个子系统有很多很多的功能,包括一些很底层的操作,但是对于调用这个子系统的用户来说很少去操作底层的操作,那么用户希望有一个特别简单的入口就可以使用这个子系统的大部分操作,而不是调用各种类. 那么我们就给这个子系统加一个外观类吧
使用场景: JDBC对于不同的数据库访问提供了相同的入口.
好处: 简化了用户使用,并且子系统发生改变用户不需要知道(例如JDBC,为QUERY做一个外观类).

阅读全文 »
上一页1…456下一页

55 日志
5 分类
1 标签
GitHub E-Mail
© 2016 — 2022 吕兴志
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4