浅谈设计模式

简介: 学习设计模式也有很长时间了,说实话,老师以故事的方式讲课,我以前是听不进去的,因为老师所举的例子只是字面上表示那种模式,但实际想一下,不是那么回事,也就是说例子不是那么恰当。
学习设计模式也有很长时间了,说实话,老师以故事的方式讲课,我以前是听不进去的,因为老师所举的例子只是字面上表示那种模式,但实际想一下,不是那么回事,也就是说例子不是那么恰当。其实,对于几种觉的模式,把模式的定义看一下,再结合代码,就能理解了,不要 20 分钟就能讲完的内容,用 2 节课还完成不了,这效率谁都知道。最后,只有自己看书,了解设计模式面向对象的三个特征:封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 ; 继承,它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 ; 多态 , 是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
下面,我再讲一下我理解的几个设计模式。
先谈一下工厂模式,它分为简单工厂模式、工厂方法模式和抽象工厂模式。简单工厂模式:有抽象实现类,具体的实现类,具体的一个工厂类。这个工厂就是负责创建一个与其它类基类类型相同的具体的类实例,好处就是隐藏具体实现类对象,是接口模式的编程方法;工厂方法模式:在简单工厂模式的基础上,加入抽象工厂类,这样,就能创建多个以抽象工厂类为基类的工厂类,每个工厂类对应一个具体实现类,实现各个工厂的单一职责;抽象工厂模式,为了解决工厂方法模式下,工厂类太多复杂的问题,将一些属于同一系列的实现类实例的创建任务放到一个工厂中,类似于公司产品一个系列。我见过的用工厂模式构建的项目中,使用的一般是简单工厂模式,用一个工厂方法,避免文件太多、难以理清的问题。放到一起的是全部的具体类的创建,本来没有联系,在操作的时候,人为的把这些类联系起来操作就行了。
再谈一下单例模式,单例模式在项目中也是很必要的,我在做过的项目中用过了。就是从 log4j 移植到 .net 版本的 log4net, 它用来记录程序的运行状态、错误信息等。在 web 应用程序中,在程序启动时初始化一个全局的对象 Instance, 其它地方就可以随时调用了,用它来把信息写入 log 文件中,实现这种模式的一个方法就是把构造函数设为 private, 在类的内部 new 一个静态的 Instance ,这样就只有一个唯一的对象实例了。我觉得,这个单例模式用的地方也不是太多,因为就看到过 log4j log4net 是使用它的一个经典例子,其它的地方也没有了。在项目中的数据访问层,我也想把它们做为单例模式的类,不过,做为一个 web 应用程序,如果多人用时使用同一功能,是不是会造成死锁的问题?这我还没有测试过,因为现在的环境,三、五个人同时用是没有问题的,关键是人上百或上千、上万的时候,是不是会有问题,这个问题还有待进一步思考。
再谈一下适配器模式,这是一个结构型的模式,现在来讲一下我对它的思想的理解,我喜欢用代码的方法讲,这样具体一些,对于这个适配器模式的概念,也比较抽象,就是你看了它的概念定义也不知道是什么意思。用我做过的项目中的东西讲吧,我做过一个 .net 代码生成器的东西,那里面要用到数据库类型向 C# 类型转换的问题,比如说:数据库里面的 bigint, c# 中表示为 long 。那么,你就要用一个类对它转换,如果你目标方法需要 long 类型的数据,而源方法只能提供 bigint 类型的,那么这个适配器就要担任这个 bigint long 类型转换的任务。像这些用到过适配器模式的还有很多,有些比较的隐蔽,可能是几个模式组合使用了,那么,我们没学过这种模式的定义或者思想,那么也不知道它是一个模式。
最后重点谈一下模版方法模式,模版方法模式就是依样画葫芦,定义一个接口类,由子类去继承和实现它定义的方法。这是 .Net 里面最常用的简单三层框架结构的模式。因为我们在实现功能的时候,最主要的就是对数据的增、删、改、查,既然每个对象都要这些操作,那么这种模版方法模式正好符合要求,可以用同一个模版来约定操作。模版模式,最核心的内容就是一个共同的模版,这样以后的操作都是围绕这个模版进行的,每个类也能自己增加独特的方法(这个并不约束),这就更符合实际编程的需要,对于定义好的模版,也能实现接口设计的原则,对修改关闭,对扩展开放。不过,每种模式都有它的优点和缺点,在接口需求发生改变时,需要修改所有的继承于接口的代码,这是很麻烦的。
总结:其实,我们学习的模式,就是很多种编程的思想,如果没学过这些思想,在遇到难题的时候,也不能想出好的方法来,学习之后就能“套用”这些思想去解决问题了。在项目开发中,往往需要不同的设计模式结合使用,才能满足实际需求,因为一个项目有不同的模块,功能不同适用的设计模式也会不尽相同了。比如:模版方法模式,在对一些有共同方法的对象有用;观察者模式,在类似于向不同的客户发送同一份文件这样的需求时使用;状态模式,在流水线生产这样的环境中适用;创建者模式,在类似于搭配服装的需求时使用。总之,不同的地方适用的设计模式是不同的,这需求结合实际情况使用。不同的设计模式的结合,可以使项目更好地进行。
参考文献:
[1] 郭志学 . 《易学设计模式》 . 人民邮电出版社;
[2] James W.Coopper. C# 设计模式》 . 电子工业出版社
 [3] 刘秋香 , 王云 , 姜桂洪 . Visual C#.NET 程序设计》 . 清华大学出版社
相关文章
|
设计模式 算法 关系型数据库
23种设计模式总结
23种设计模式总结
100 0
|
6月前
|
设计模式 缓存 算法
设计模式
设计模式
41 0
|
设计模式 安全 Java
设计模式~单列模式-01
单列模式 1、饿汉式 2、懒汉式(lazy loading) 3、双重检测 4、静态内部类
35 0
|
设计模式 存储 安全
设计模式(三)
设计模式
130 0
|
设计模式 XML 存储
|
设计模式 存储 缓存
设计模式的几个问题
《基础系列》
114 0
|
设计模式 uml
设计模式(二),设计模式详解
设计模式(二),设计模式详解
|
设计模式 消息中间件 缓存
设计模式也可以这么简单
设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结,其中最出名的当属 Gang of Four (GoF) 的分类了,他们将设计模式分类为 23 种经典的模式,根据用途我们又可以分为三大类,分别为创建型模式、结构型模式和行为型模式。
245 0
设计模式也可以这么简单
|
设计模式 安全 Java
设计模式是什么鬼
首先我们得搞清楚点面向对象的概念,面向对象其实是对现实世界的理解和抽象的方法,也就是在计算机世界里去模拟现实世界的一种编程方法,具体是利用封装、继承、多态的方法去建立模型,我们一个个看下这都是些什么鬼。
1566 0