设计模式:概述

在校期间一直用C做嵌入式开发,SoC片上编程,毕业后直接转成JAVA做Android开发,三年,感觉到了一个瓶颈,发现其实我一直在用面向过程的编程思维做面向对象的开发,所以,再开始重新学习下编程理论,夯实基础, 读了大量的书籍

有几本书从中受益匪浅,没读过的童鞋,极力推荐不可错过
Robert C.Martin《代码整洁之道clean code》
Martin Fowler《重构-改善既有代码设计 Reactoring》
Andrew Hunt&David Thomas《程序员修炼之道——从小工到专家》
《高效程序员的45个习惯:敏捷开发修炼之道》
清晰的章节,唯美的话风,极具亲和力的描述, 之前在开发过程中遇到的困惑、疑问, 这几位前辈用委婉优雅而又极其简明的语言娓娓道来(这里也感谢译者,我想他们都一样风趣幽默),读了这几本书仿佛编程的大门才真正打开, 茅塞顿开,甚至 遗憾没有早点遇到它们, 任何一个涉入编程领域的人都应该读一读, 让我想起了《苏菲的世界》(貌似是这本,读书太多,混了^_^)里的一句话:一本好书的作者,是任何时代里当之无愧的贵族。我想他们计算机领域、是我们时代里无可厚非的贵族,最顶礼的膜拜送给他们,thx.
其实现在想来,遇到这几本书时机恰恰好吧,如果几年前的我来读他们,可能只会领会下精神,而今,当带着诸多疑问,走近他们的时候,一个一个答案迎面而来,一切如此珠联璧合。
 
同时, 重新开始学习设计模式,决定记下来一为备忘,敝帚自珍便于日后回顾,二若能帮助到别人当然更好。

一、总结设计模式的核心

1)面向接口的编程,接口很伟大
接口,一个接口也可以是一个抽象类,或者一个基类也可以看作是一种接口的表现形式。要点在于,我们在面向接口编程的时候,可以使用多态,那么实际运行的代码只依赖于具体的接口(interface,抽象类,基类),而不管这些接口提供的功能是如何实现的,也就是说,接口将系统的不同部分隔离开来,同时又将它们连接在一起,伟大!
接口多态实现的基础,具体说应该是运行时多态(另外一种是编译时多态,通过函数重载实现),通过它可以调用子类或具体实现里面扩展的功能,它不再是一个已成定局的具体实现,而是一个‘接口’,具体如何实现的,谁实现的,有一万种可能,这就是接口的伟大,甚至自己是什么都没有,但是它给了你一条通向远方的路,让你的程序从一根电线杆长出了许多枝枝蔓蔓,瞬间扩展成一棵参天大树了,只能说,哇哦,伟大。
2)封装变化,抽象。
找到系统中变化的部分,将变化的部分同其它稳定的部分隔开。
尽管这个概念很简单,但是它几乎是所有设计模式的基础,所有模式都提供了使系统里变化的部分独立于其它部分的方法,其实,所有的设计模式实现语法上没有什么区别,说白了就是继承和委托,无它,只是根据要解决问题的不同划分。设计模式的使用都是双刃剑,如果你的应用需求不会发生变化,那就不需要用设计模式。
另外,SOLID:
单一职责原则(SRP):一个类应该只有一个发生变化的原则。
开闭原则原则(OCP):对扩展开放,对修改关闭。程序需要扩展的时候,不去修改原有的代码,通过接口和抽象类实现。
里氏替换原则(LSP):任何基类出现的地方,子类都可以出现。( 父类 = new 基类,是多态实现的精髓所在吧
依赖倒置原则(DIP):依赖于抽象而不是依赖于具体。对抽象进行编程,不要对实现进行编程。
接口分离原则(ISP):接口细化,建立单一接口。调用者只能访问到它需要的方法

二、23种设计模式

创建型
1. Factory Method(工厂方法)
2. Abstract Factory(抽象工厂)
3. Builder(建造者)
4. Prototype(原型)
5. Singleton(单例)
结构型
6. Adapter Class/Object(适配器)
7. Bridge(桥接)
8. Composite(组合)
9. Decorator(装饰)
10. Facade(外观)
11. Flyweight(享元)
12. Proxy(代理)
行为型
13. Interpreter(解释器)
14. Template Method(模板方法)
15. Chain of Responsibility(责任链)
16. Command(命令)
17. Iterator(迭代器)
18. Mediator(中介者)
19. Memento(备忘录)
20. Observer(观察者)
21. State(状态)
22. Strategy(策略)
23. Visitor(访问者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值