《敏捷软件卡发 原则 模式 实践》笔记 1

来源:互联网 发布:流媒体数据处理算法 编辑:程序博客网 时间:2024/04/27 19:55
 
模式1

1 Null Object
可以使用NULL OBJECT来替代NULL检查,正象《重构到模式》中所说的,使用这种技术的一个原则是看能否使代码得到简化,如果不能,就没有必要使用。
一个常用的做法是使用JAVA的匿名内嵌类来实现一个NULL  OBJECT,可以这样来检查是否为空对象
if(e == Aclass.NULL) {
 //do something
}
2 "Singleton" vs "MonoState"
为了保证一个class的instance的唯一性,可以使用通常的做法(全局变量),或者采用这两种模式之一。这两种模式使用不同的方法来保证实例的单一性。
2.1 方法
singleton使用:
 static creattion method
 static instance variable
 private construct method
而monostate使用:
 static member variables
 
2.2 派生
singleton的subclass 不是singleton
monostate的subclass 是 monostate.
2.3 透明性
用户必须知道singleton的,才能正常使用它
用户不必知道monostate,就能正常使用它
《重构到模式》提到singleton是最被滥用的模式,所以如果通常的方法能够解决的问题,就没有必要采用这它。似乎两个人的论点的不是能一致。
3 "Facade" vs "Mediator"
facade用于封装一组复杂全面的接口为一个简单的特定于应用的接口,在做这种封装的时候,facade可以施加许多策略到原始接口上。这给用户带来简单性的同时,也能限制用户使用原始接口的方式。 这是代表一个约定,你必须遵守,不能绕过他。

mediator隐藏他的策略,用户不能看到和改变这种策略
4 "Template method" vs "strategy"
共性:分离通用算法与它的具体实现
分别:
Template method通过继承实现这种分离,但部分违反了DIP原则(?),sub class被绑定到了他的super class上,只有算法可悲重用。
strategy通过委托来达到相同的目的,它比Template method更加遵循dip,从而使算法与具体实现都可以被重用。

5 Command模式与Active Object
Command模式用来解耦动作的invoker与receiver,concrete command可以save receiver 的一个instance,从而使any invoker can call this instance of command at anytime. 在具体应用的时候,我们可以动态指定一个concrete command给一个invoker.
transaction 也是command的一个具体应用,但具体这种用法的好处,还不是很理解。
Active object 与 Active engine双剑合璧模拟多线程,rtc也是他的一种应用,《量子编程》中的RTC似乎也确实是符合这个模式。
原创粉丝点击