APP下载

软件设计模式之我见

2015-03-27孟令帅李晋

企业文化·中旬刊 2015年1期
关键词:结构型设计模式适配器

孟令帅+李晋

摘 要:软件设计模式就是Uml统一建模语言的技巧性概念,其主要研究各个类模块和接口之间的安排与搭配,也是为程序员提供交流的一个很好的平台。利用软件设计模式可以做出质量更高,代码更少,扩充更容易的软件。它更像是一个工具箱,可以生产出更漂亮、更简洁的代码。

关键字:软件设计;设计模式;建模语言

中图分类号:TB472 文献标识码:A

软件设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。软件设计模式主要分为创建型模式、结构型模式、行为型模式三种,其中创建型模式用来处理对象的创建过程,结构型模式用来处理类或对象的组合,行为型模式用来对类或对象怎样交互和怎样分配职责进行描述。

1、设备软件系统的特点

为增加新的处理新工艺变化而需要的功能,我们会修改设备软件的主程序或部分组件源代码,这样不仅修改代码量比较大,延误了软件更新的及时性要求,而且降低了原软件系统的可靠性,为设备的使用留下隐患;对于为修改工艺方法发生的软件系统的改动,则对应的设备软件的主程序修要修改的部分大大增加,甚至更改程序的主框架,使程序不易扩展,造成程序的可移植性大大的降低,不利于系统的升级,增加维护成本,因此,我们引入了设计模式的概念。

2、设计模式的分类

2.1创建型模式

创建型模式用来处理对象的创建过程,主要包含以下5种设计模式:抽象工厂模式(Abstract Factory)、生成器模式 (Builder)、工厂方法模式(Factory Methord) 、原型模式 (Prototype) 、单例模式(Singleton)。Abstract Factory是应对一系列对象的创建的问题,正如前面文章中举的例子,对于创建一个汽车对象来说,Abstract Factory模式更关注一系列的对象的创建,或者说是汽车类型中的各个部分,如:Wheel、Engine、Body等等类型的创建。换句话说关注点在这一系列对象上。Builder是应对一个复杂对象创建的问题,或者说是针对这个复杂对象中的子对象的创建的问题。以汽车的例子来说,我觉得比起Abstract Factory模式,Builder模式相对注重汽车类型(上面所说的“复杂对象”)本身以及其各个部分(Wheel、Engine、Body等等)类型的创建。Builder模式要求这个复杂的类型(汽车)中的各个子类型的结合部分相对稳定,用例子说明就是对于汽车来说,无论用什么配件组装,个个配件的组装方式都一样,有相对稳定的接口。对于这辆车你用什么牌子的Wheel、什么牌子的Engine可能变化会很大很频繁。

2.2行为型设计模式

行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含11种设计模式。允许多个类处理同一个请求,而不必了解彼此的功能。他在类之间提供一个松散的耦合。类之间唯一的联系就是相互之间的传递请求。请求在类之间传递,直到其中一个类处理它为止。当一个对象向多个对象发送相同的信息时,就需要一种策略来确定由哪个对象对所发送的信息进行处理,而这样的处理对象也只能有一个。使用case语句或if语句的方法会给程序的维护带来很大难度,这就需要职责链模式来完成。职责链模式将发送对象和接收对象进行了解耦,以更好的应对变化。职责链模式将接收对象形成一个链,发送对象将信息发送给接收对象链中的一个对象,这时,信息就沿着对象链向下传送,直到有一个对象对信息进行处理。

2.3结构型模式

结构型设计模式是从程序的结构上解决模块之间的耦合问题。包括以下七种模式:Adapte适配器模式:Adapter模式通过类的继承或者对象的组合侧重于转换已有的接口,类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。Bridge桥接模式:将抽象部分与实现部分分离,使它们都可以独立的变化。减少因变化带来的代码的修改量。Composite组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得客户对单个对象和组合对象的使用具有一致性。从而解决了解决客户程序与复杂对象容器的解耦,即:通过继承统一的接口,我们可以将容器对象及其子对象看成同一类对象使用,以减少对象使用中的复杂度。Decorator装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。Decorator模式采用对象组合而非继承的手法,实现了在运行时动态的扩展对象功能的能力,而且可以根据需要扩展多个功能,避免了单独使用继承带来的“灵活性差”和“多子类衍生问题”。同时它很好地符合面向对象设计原则中“优先使用对象组合而非继承”和“开放-封闭”原则。Facade外观模式:为子系统中的一组接口提供一个一致的界面,简化接口。Flyweight享元模式:运用共享技术有效地支持大量细粒度的对象。面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题。但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价。那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作。Proxy代理模式:为其他对象提供一种代理以控制这个对象的访问。解决直接访问某些对象是出现的问题。从代码的角度看Adapter适配器模式和Proxy代理模式有些类似,前者是解决现有对象在新的环境中所遇到的问题,后者是解决直接访问对象时出现的问题,这两种模式从使用角度看都是解决直接访问对象时出现的问题,只是含义不十分相同。

3、结束语

通过对设计模式的研究,我们的软件研发人员不仅能设计出满足客户需求并且灵活、易扩展、复用性强的软件系统,同时还能使我们的设计者深入了解面向对象的编程思想,提高本身的视野及实际研发水平。

参考文献:

[1]张海攀.信息系统软件体系结构设计研究[N].电脑报,2014

[2]丁黎明. 构件技术的中间件开发研究[J].企业文化,2014

猜你喜欢

结构型设计模式适配器
“1+1”作业设计模式的实践探索
自愈合薄膜的研究进展
三维协同设计模式下的航天项目管理实践与展望
交通机电工程设计模式创新探讨
体育社团结构型社会资本的培育研究
适配器模式及其应用
新型水文测验GPS适配器设计与应用
浅议科技论文结构型英文摘要的句型特点和表达方式
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
互动式设计模式研究