设计模式笔记

  • 格式:doc
  • 大小:142.50 KB
  • 文档页数:4

1、对于某个需要显示Name的TextView,将Name封装在Person
类中,显示或者比较的时候调取。

这样在以后若需要将Name和ID号同时显示的时候,可以避免延长Name字段而导致需要检查每个用到Name的函数
2、getter和setter方法在设计阶段要尽量避免,在实现阶段才需要
考虑。

3、信息应当合理地封装在对象中,以隐藏其实现。

4、减少耦合:对象的实现对使用者完全隐藏。

基类是脆弱的,因为对基类的修改是很危险的。

用接口实现:实现接口的类中中必须针对公共的所有方法提供自己的版本。

5、抽象工厂模式:
源代码:
class Employee
{
public void youAreFired()
{......}
}
系统中有很多如下代码:
Employee fred=new Employee();
fred.youAreFired();
首先需要将Employee变为一个接口,实现该接口的类为Peon,接口中有具体的youAreFired方法。

这时创建一个工厂类EmployeeFactory,该类中的create方法直接return new Peon()。

所以说最终一共有三个类/接口:Employee(interface),EmployeeFactory,Peon。

即不能直接访问Peon实例,只有通过工厂类获得。

其中工厂类的类型为Employee接口
好处:源代码中需要多次new Employee(),如果这个Employee的名字变了,则需要做大量修改工作,而将其封装到一个工厂类中,通过工厂类的create()创建Employee对象,只需要在create中修改return 的方法即可。

总结:抽象工厂模式是避免“必须修改所有new调用”问题的一个好策略.
6、单例模式
目的:使类的一个对象成为系统中的唯一实例。

7、命令模式
目的:将如何做某事的知识封装在对象中,进而可以将其到处传送。

基本用途:可以在线程中使用
8、策略模式
使用命令模式的对象来定义做某些操作,并将结果传递给其他对象。

如:Array的sort()方法,在使用其他类时可以直接使用Array.sort(args)。

9、观察者模式
目的:使事件生成者和对这些事情感兴趣的对象(如时钟和计时器)之间脱耦和。

实现:“注册——通知——撤销注册”,即侦听事件。

10、合成模式
树状模式,如菜单,树中所有对象具有统一的接口。

对于菜单系统而言,统一的接口表明,如果点击一个项,不需要确定其具体是目录还是文件。

只是向对象发送一个print()消息,这里面会决定打印的是内容还是文件名。

11、计算器类:
脱耦和:将加、减、乘、除分离开,即用四个类,这四个类继承自基础运算类(脆弱基类问题,可改为接口?),来避免重复。

另外运算结果和输出也要分离开,调用用于显示的类。

简单工厂模式:避免重复new,在工厂中通过判断运算符生成对应四个类。

工厂类为静态类。

12、商场销售系统
主要是针对商家的打折、返利等模式进行收费。

策略方法:
由于基本模式相同,因此提供一种抽象类,该类中有一种方法,在子类中均被复写。

本例中即是将各种返利或打折算法作为具体的方法,均继承自抽象类。

具体实现过程图如下
中形如new CashContext(new CashNormal())这种形式。