写程序的时候,规模小,尚不能感觉设计模式的重要性。等规模一上来,需求一迭代,一个应用了恰当设计模式的工程,总能以最小的代价进行最快的迭代。
但是一个奇怪的点是,我总记不住具体的实现所对应的设计模式的名字,但是对他们背后的设计思想,却是念念不忘——依赖于抽象而非具体;对扩展开放,对修改关闭;
Builder
首先,将一个复杂逻辑抽象成一组构建过程(具有前后先后次序,即时序约束)或者一组元操作(便于进行组合实现复杂逻辑),用一个接口封装。
然后,不同的逻辑实体类,继承该接口,进行不同的具体实现。
最后,依赖于接口,组合构建过程或元操作,进行具体业务代码实现。以后想换一个实现,只需要某处换一个具体实现类就行了。
1 | /* "Product" */ |
这就是一个典型的依赖于抽象而非具体。