设计模式(1)

来源:互联网 发布:手机腾讯视频网络错误 编辑:程序博客网 时间:2024/06/01 18:07

虽然小弟是夸专业学习的计算机,但对于第一次听说设计模式也是倍感羞愧。于是马上搜索了一些资料。原来设计模式真是在架构设计方面处于十分重要的地位。在网上搜索到一份笔记《设计模式精解-GOF23种设计模式解析》感觉不错,尤其是对初学者,我觉得设计模式可以先对其有个大概的感念,当在实际的工作中需要设计架构时,在详细研究每种结构的优缺点也不迟,下面就分享一下自己的感悟。

设计模式分为三类模式:创建型模式,结构型模式和行为模式。

首先介绍创建型模式中的Factory模式。Factory模式解决的两个问题是:

1.      定义创建对象的接口,封装了对象的创建

2.      使得具体化类的工作延迟到了子类中。

我觉得Factory模式可以用于在多态的实现过程中,数据和方法分离的过程,将数据类定义为Product,将方法类定义为Factory。这样在Factory的子类中首先创建一个数据的实例,实现对数据的操作。

 

Factory一般使用于成对出现两个对象,而AbstractFactory模式则要创建一组相关或者 相互依赖的对象。就是处理多个Factory子类和多个Product子类之间的关系

 

Singleton用于去创建一个唯一的对象,将构造函数和析构函数创建在protected模式下,在private模式下创建一个该类的实例,并创建一个方法,可以起名为Instance()用来分配实例的空间。

 

来看Builder模式主要是将复杂对象的创建过程和这个对象的表示分离开来,它使用另外一个类来处理对象的创建,而完全没有暴露这个对象。

 

Prototype模式通过复制原型而获得新对象创建的功能,它与之前的设计模式的区别是Builder模式重在复杂对象的一步步创建,AbstractFactory模式重在产生多个相互依赖类的对象,而Prototype模式重在从自身复制自己创建新类。

 

下面介绍结构型模式

 

Bridge模式将抽象和实现分别独立实现,使用组合的方式将抽象和实现彻底地解耦,这样的好处是抽象和实现可以分别独立地变化,系统的耦合性也得到了很好的降低。

 

Adapter模式主要是为第三方库提供了接口,有两种类别,类模式和对象模式。类模式的是指从接口从双方继承,而对象模式是指利用组合方式对第三方提供的库进行复用。这种组合方式我的理解就是在接口类的构造函数中添加第三方库接口的变量。在Adapter模式的两种模式中,有一个很重要的概念就是接口继承和实现继承的区别和联系。接口继承指的是通过继承获得了父类的接口,而实现继承指的是通过继承子类获得了父类的实现。在C++中的public继承既是接口继承又是实现继承,因为子类在继承了父类后既可以对外提供父类中的接口操作,又可以获得父类的接口实现。当然我们可以通过一定的方式和技术模拟单独的接口继承和实现继承。例如我们可以通过private继承获得实现继承的效果,private继承后,父类中的接口都变为private,当然只能是实现继承了。通过纯抽象基类模拟接口继承的效果,但是在C++中,pure virtual function也可以提供默认实现,因此这是不纯正的接口继承,但是在Java中我们可以interface来获得真正的接口类继承。

在OO设计和开发过程,可能会经常遇到以下的情况,我们需要为一个已经定义好的类添加新的操作,通常的情况我们会给定义一个新类继承定义好的类,这样会带来新问题和复杂度的提高。Dectrator提供了一种给类增加操作的方法,通过组合来实现,它没有采用常规的直接从类继承的方法,而是在同一个基类下建立另外一个类,在此类的子类中添加响应的方法。

Composite模式,在开发中,我们经常可能要递归构建树状的组合结构,Composite模式则提供了很好的解决方案,其中提供了Leaf类进行子节点的管理。


原创粉丝点击