您的位置:首页 > 其它

设计模式及其学习方法的个人理解

2017-05-18 20:00 169 查看
设计模式往往被赋予神奇和神圣的光环。也常常作为面试的问题。差别你是0基础开发者还是中高级开发者的一个方法就是问设计模式。设计模式也并不好学习,个人觉得GoF的经典著作很的难懂。这也许是由于他们站在很高的位置上,他们的经验极为丰富。以致于假设你没有相关的经验,基本上跟他们不在一个频率上。市面上也有许多试图把设计模式叫的通俗易懂的书籍,不乏成功之作。而不管怎样,假设你没有实际的经验。看再多的书也是枉然。你觉得你理解了。可是你确定你知道怎么用吗,假设不知道怎么用,那你就没有真正理解。

你也许通过一些通俗易懂的书明确了一些设计模式的应用场景,一些设计模式的结构。可是你真的明确为什么要这样设计吗?为什么这样设计就好?也许你仅仅是一味的关注“模式”,可曾关注过“设计”。
“设计”是个动词。既然要设计,那么请问怎么设计?设计要达到什么目的,又要遵守什么原则?

1. 设计的目的,目标

我们都是为了解决这个问题而设计软件。可是又不是单纯的攻克了问题就算了,要解决这个问题可以用上万种方式。而设计模式提供的是一种好的方式,为什么说它好?由于它的设计达到了这样一些目标:低耦合,高内聚,高可复用性,可扩展性。

这就是为什么模式可以成为模式。GoF的著作也无时不在讨论这样目标。

假设你带着这种思路去思考这些模式。你就不会怕你不能记住他们的设计。当然前提是你能理解这些模式怎样体现了这些目标。最好是跟实际的产品相结合去理解。

2. 设计的原则

说是要设计,怎么设计?给你一个题目,告诉你開始设计吧,总得有些技巧,思路才行。就像上小学写作文,老师总会交你一些技巧,告诉你如何的作文才是好的。胸中没有设计的原则,谈何理解设计?面向对象的N大设计原则是有必要好好理解一下的,开-闭原则。里氏替换,依赖倒置。接口分离,组合优先,最少知识。

呆着对这些原则的理解再去看设计模式,你就不会去死记模式的应用场景和模式的结构了。

3. client代码

永远记得有个神奇的而又简单的东西叫client代码。这种设计对client代码来说意味着什么?由于不论什么模式都是写来被别人用的,为什么这样写就好?由于别人用着好!

4. 接口和抽象类

总结下全部的模式,你会发现差点儿永远离不开接口和抽象类。这一点非常显然,由于设计要面向抽象。然而并不被0基础的开发者发现。面对一个问题,0基础的开发者想到的永远是怎样去实现。而不是怎样去架构。

或许你懂得java或者C++的语法,你却仅仅知道面向过程的写法。非常多人都熟知工厂模式,是否第一时间就想到工厂是个接口,而你能够由此实现不同的工厂。策略模式。策略事实上也是个接口。你能够实现不同的策略。对于client代码而言,它仅仅须要知道这个接口,而无需关注你的工厂或者策略的实现方式。假设你如此理解,就不难自己画出一个抽象工厂或者策略模式的类图了。

5. 事实上并不神奇

当我为我的同事们分享设计模式这个主题之后,展示非常多在项目中用到的设计模式,差点儿非常多人都说这些都是寻经常使用到的东西。可是曾经都没有认为这还是个模式。有这么高级的名字。事实上既然模式是人们经常使用的东西才叫模式。那你天天在用它就不足为奇了,假设你没有天天看到它,仅仅有两个可能:1. 这就不是个模式。2. 你开发或者维护的那个产品真的锉到家了。 所以学习模式最好的办法就是结合你经常在用的那些代码。

当你慢慢理解了这些模式。你会发现你自己也常常会不经意间用到设计模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: