图书信息
作者:Eric Freeman
中文版出版社:中国电力出版社
推荐理由
这是我看过的最好的计算机类图书(别嫌弃我读书少,–>__–>),它有如下优点:
图文并茂、层层深入、生动有趣、从问题引出解决方案代入感强、每章的总结别出心裁、学习者与设计大师的对话深入浅出、读每一章都像在读一个故事……
本书一直在强调一件事情:针对接口编程,而不是针对实现编程。“针对接口编程”真正意思是“针对超类型编程”,关键就在多态,利用多态,程序可以针对超类型编程,执行时会根据实际状况执行到真正的行为,不会被绑死在超类型的行为上。分开可能需要变化的部分,把它们独立出来,不要和不需要变化的代码混在一起。
本书内容
1 策略模式
2 观察者模式
3 装饰者模式
4 工厂模式
5 单件模式
6 命令模式
7 适配者与外观模式
8 模板方法模式
9 迭代器与组合模式
10 状态模式
11 代理模式
12 复合模式
13真实世界中的模式
14剩下的模式
对自动化测试的一点启发
在读命令模式这一章的时候突然联想到一个困扰我多时的问题:在Android应用开发中如何做好功能测试?我们知道移动应用中涉及到大量用户交互场景,很难做到自动化测试,完全自动化不太现实,我们只做逻辑测试会简单一点吧。
抛开界面,我们的功能其实就是一串方法调用,只是按照我们的开发习惯这些方法会散落在每个界面,我们为什么不把他们从界面拿出来写入一个逻辑处理层呢?这样只需要测试逻辑处理层就可以了。请看我在知乎的提问:作为应用开发者你是如何做好自测的?
Activit01{
btn01{
process01
}
btn02{
process02;
goto Activity02
}
}
Activit02{
btn03{
process03
}
btn04{
process04;
}
}
上面的代码要想测试只能通过页面操作来触发逻辑了。
下面添加逻辑层:
Presenter{
Callback cb
Presenter(Callback cb)
process01
process02
process03
process04
}
Activit01{
Callback cb
Presenter p = new Presenter(cb)
btn01{
p.process01
}
btn02{
p.process02;
goto Activity02
}
}
Activit02{
Callback cb
Presenter p = new Presenter(cb)
btn03{
p.process03
}
btn04{
p.process04;
}
}
Test{
Callback cb
Presenter p = new Presenter(cb)
test01{
p.process01
}
test02{
p.process02
}
test03{
p.process03
}
test04{
p.process04
}
}
这样在Test中你可以随意调用逻辑层代码。
这是我理解的很原始的MVP模式的实现,可能通过回调不是最简洁的方式,但是最易懂的。
计划
目前读到适配器与外观模式这一章,后面计划往后读的同时总结前面的章节,真正吸收为自己的东西,以后在开发过程中去运用。