现在的位置: 首页 > 综合 > 正文

设计模式学习

2013年10月30日 ⁄ 综合 ⁄ 共 3451字 ⁄ 字号 评论关闭
很早以前就学过设计模式了,也有好几次尝试把23个设计模式学完,不过一直没有能坚持下来。希望这次能够好好把它学完,嘿嘿。
第一次听说设计模式应该是在大二下的时候,我们有一门课软件工程概论。那时候我们的老师开始向我们提起了四人帮(Gang of four),提起了四人帮,提起了Liskov等设计原则。不过那个时候连面向对象的思想也搞不清楚的,而且看到老师对设计模式的无限崇拜,以及老师也说,就连他也就只有对其中的5、6个比较熟悉。产生对设计模式的神秘感的同时,也对设计模式产生了距离感。那时候根本就没打算看,只是为了应付考试才硬看了一下。大三的时候为了应付考试背了一下设计模式的分类,但是考试的时候居然还是选错了!那是大三上,那门考试最终考了61分。大学里的最后一次看设计模式是在大四上。因为那时候开始找工作了,然后开始疯狂的上网搜集面经,面试题,比试题。突然发现其中有一部分是设计模式,特别是一些好公司对这些有要求,所以又开始看了。不过可惜的是,一开始找工作就找了一个还不错的,而且加上那个时候实习还是挺忙的,所以就忙着享受最后一年的大学生活了。开始工作了。。。没用到过。。。说实在的,我们刚毕业的大学生,跟本就没机会有设计甚至参与设计的机会,设计模式有啥用?而且那时候也没有开窍阿,根本不了解设计模式的重要性,根本不知道自己以前在大学里开发的软件为什么会那么脆弱,一个不是很复杂的软件被我搞得那么复杂,扩展性几乎没有;加一个类似的功能,直接把代码考过来修改;其实,好像都没用到OO的思想,那时候还奇怪为什么别的同学有那么多的类,WHY,WHY,WHY?最近一次看设计模式是在公司的一次培训课上。一个同事给我们简单的讲解了一下设计模式,以及在具体项目中的应用。说实在的,这个培训课来的真实及时阿。刚刚对OO有点感觉,刚刚开始怀疑我以前开发软件的过程中是否做错了什么。那时候一冲动就开始看设计模式了。而且准备是一天一个设计模式,把设计模式贴在blog上。从后来看起来,这完全是错误的!首先,最重要的一点是看设计模式不能追求快,这是一种高层的武功,是要慢慢修炼、慢慢品味、理解的,每一个模式都是程序编写中的一句名言,一个程序编写中的哲学。一开始看了几个模式之后,后来就赶不上进度了。后来甚至直接在blog贴网上摘来的设计模式的定义,别人对设计模式的理解。直到有一天被一个同学追问好像两天学的都是同一个模式,只不过用了不同的名字,真是糗大了!后来就没看了,一直到现在。
有句话说得真是有道理啊:持续投入非常重要,坚持才会成功。这次一定要把设计模式学完,否则以后就真的没机会了。恩
 
附:设计模式简介
设计模式分类:
创建型(Creational)负责对象的创建
结构性(Structural)处理类与对象间的组合
行为型(Behavioral)类与对象交互中的职责分配
A.   创建模式

 

Factory Method(工厂模式)
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Creates an instance of several derived classes
 
Abstract Factory(抽象工厂)
与Factory Method的区别是,Abstract Factory创建一组对象,而Factory Method只创建一类。Creates an instance of several families of classes
 
Prototype(原型模式)
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。A fully initialized instance to be copied or cloned
 
Builder
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Separates object construction from its representation
 
Singleton
一个类只能有一个实例,最简单的设计模式。A class of which only a single instance can exist
 
B.结构模式
Adapter
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。Match interfaces of different classes
 
Bridge
将抽象部分与它的实现部分分离,使它们都可以独立地变化。Separates an object’s interface from its implementation
 
Composite
将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。A tree structure of simple and composite objects
 
Decorator
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。Add responsibilities to objects dynamically
 
Facade
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。A single class that represents an entire subsystem
 
Proxy
为其他对象提供一种代理以控制对这个对象的访问。An object representing another object
 
Flyweight
运用共享技术有效地支持大量细粒度的对象。A fine-grained instance used for efficient sharing
 
C.行为模式
Template Method
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。Defer the exact steps of an algorithm to a subclass
 
Memento
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。Capture and restore an object's internal state
 
Observer
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。A way of notifying change to a number of classes
 
Chain of Responsibility
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。A way of passing a request between a chain of objects
 
Command
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。Encapsulate a command request as an object
 
State
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。Alter an object's behavior when its state changes
 
Strategy
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。Encapsulates an algorithm inside a class
 
Mediator
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。Defines simplified communication between classes
 
Interpreter
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。A way to include language elements in a program
 
Visitor
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。Defines a new operation to a class without change
 
Iterator
提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。Sequentially access the elements of a collection

抱歉!评论已关闭.