软件设计模式浅析
木子田心街
(河南 郑州)
摘 要:本文主要从设计模式的几个方面进行简单的概括和研究,从简单的工厂模式到Coordinator模式,以及对设计模式在未来的展望做出了进一步的分析和总结。
关键词:简单工厂模式;Coordinator模式;前景展望
Analysis of software design patterns
(Zhongyuan University of Technology ,Software Collage ,Zhengzhou Henan,China )
Abstract: In this paper, a simple summary and research from several design patterns, from simple factory pattern to the Coordinator pattern, and the design pattern in the future are analyzed and summarized further. Key words:simple factory; Coordinator; Prospect
1 设计模式概论
在软件设计模式的选择和使用中,本质上是要了解面向对象的,就面向对象而言,这是个复杂但又简单的过程,目前,面向对象的概念已经深入到计算机软件设计领域的几乎多有的分支,在面向对象程序设计中,对象是构成软件系统的基本单元。类是从相同类型的对象中抽象出的一种新型的数据类型,对象是类的实例。
首先在自己对主观意识上的理解,重要的是进行交流,在交流过程中,我认为如果计算机的体系结构不发生革命性的变化,我们现在所有应用的程序语言也就在百变不离奇踪了!精通一门编程语言后再去搞其他的编程语言,就会发现学习一种新的语法格式了。其中主要涉及到“类,对象,继承,属性,方法,静态,重载,隐藏,重构,声明,定义,初始化,赋值等”。
2 设计模式分类
软件设计模式是从一个复杂到简单的演变过程,现在的设计模式已经分工的越来越细,因此在对象的创建和使用中分开也成了最重的趋势。其中设计模式涵盖了几个重要的部分。
2.1 创建模式
简单的工厂模式(simple factory);抽象的工厂模式(abstract factory);创建者模式(builder);原型模式(prototype);单例模式(singleton)。
抽象的工厂模式(abstract factory)在使用相同一个工厂等级结构负责这些不同产品等级结构产品对象的创建。对于每一个产品族,都有一个具体工厂。而每一个具体工厂创建属于同一个产品族,但是分属于不同等级结构中的产品。通过引进抽象工厂模式,可以处理具有相同等级结构产品族中的对象创建问题。
例如一个抽象产品和一个产品类:
Public interface productB
{}
Public class productB1 implements productB
{
Public productB1()
{}}
2.2 结构型模式
在结构模式中,继承是随处可见的,但是每一种继承只适合封装一种变化,卖弄对多维变化场景时,如果仍然强行使用多继承来实现,必然会造成子类数目成飞速型增长问题,比如在桥模式中,通过简单的继承方式并不能很好地处理抽象化与实现独立变化的情况,但是通过对象组合的方式却可以很好适应此方面。主要分为以下几种模式。
外观模式(facade);适配器模式(adapter);代理模式(proxy);装饰模式(decorator);组合模式(composite);享元莫斯(flyweight)桥模式(bridge)。
2.3 行为型模式
行为模式设计到算法和对象间的职责分配,不仅描述对象或者类的模式,还
描述他们之间的通信方式。行为模式采用继承机制在类间分派行为,其他的行为对象常常将行为封装在一个对象中,并将请求指派给它,具体的模式有以下几种。
模版方法模式(template method);观察者模式(observer);状态模式(state);策略模式(strategy);职责链模式(chain of responsibility);命令模式(command);访问者模式(visitor);调停者模式(mediator);备忘录模式(memento);迭代器模式(iterator);解释器模式(interpreter)。
例如备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
图(1)memento
3 设计模式中面向对象的应用
在使用面向对象的时候,我们首先就要了解面向对象中的三要素:封装,继承和多肽。
在具体的实例中,比如说要绘制圆的程序,通过分析后可以得到,圆是这个问题的唯一事物。对于具体的圆,有的大些,有的小些,圆的位置也不尽相同,但是任何一个圆都可以使用圆心的横纵坐标和圆的半径这3个数据描述,因此这就是对圆这个事物的数据抽象,因此要画出圆,该程序还应该有设计圆的位置,半径大小,绘制圆形的功能。
3.1 面向对象具体设计
在面向模式的软件架构中,通过了简单的实例对资源管理进行程序化分析,
(1)Coordinator模式 该模式描述了如何协调完成设计多个参与者的任务,以保持系统的一致性。参与者可能是资源。资源用户及资源提供方。在任务涉及多个参与者时,这个模式提供的解决方案使得要么所有参与者都完成其工作,要么都不完成,从而确保系统始终处于一致的状态。首先在执行任务的多个参与者之间进行协调。在参与者之间分配任务,每个参与者独立地工作,确保整个任务成功完成。
对于面向对象中对象的实现,根据类的不容而不同,即类决定了对象是如何实现的。因为类定义数据的类型,包含对象的属性和方法,完成了对象所有需要的操作。面对象的创建无非是类实例化的结果。
(2)在实现的时候通过继承的类,这样就产生了有着同样借口的一组对象的类,如此设计对多态的十分重要。多态性就是多种表现形式,具体来说,可以用“一个对外借口,多个内在实现方法”表示。例如,在计算机的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现时一样的。针对不同的数据类型,编程人员不必手工选择,只需要使用统一借口名,系统可以自动选择,这样就可以在很大程度上降低了系统对实现模型的依赖性。
(3)其中Coordinator模式在结构上包含如下元素:
任务: 涉及多个参与者的工作单元。
参与者: 负责完成部分任务的活动实体,可以是资源用户。资源提供方及资源。
协调者 负责协调工作,确保整个任务得以完成的实体。
客户端:任务的发起者,直接命令协调者执行任务
运用类图说明这些元素之间的依赖关系:
图(2)类图的依赖关系
在具体实例中,交互始于客户端命令协调者开发执行任务。接下来,任务涉及的所有参与者都向协调者注册。然后,客户端命令协调者提交任务,此时协调者将要求每个参与者执行准备阶段。一方面,如果参与者指出准备阶段失败,协调者将中止整个任务。另一方面,如果所有参与者都成功了准备阶段,协调者将命令所有参与者都执行提交阶段。
4 前景展望
就当前情况下来看,软件设计模式精细分工已经是实在必行,从我个人的角度来看,随着现在软件行业应用程序和游戏软件的开发不断的壮大,个人能力在庞大而复杂的系统中,思想也有一定的局限性,能力和挑战性在不断的提高,尽管我们都相信技术型的操作会随着熟练的程度而提高,但是殊不知如果把项目分工下去将会大大的降低软件的开发成本,而且增强了软件的灵活性,在未来的发展中,软件设计模式将会更加的趋于完善。
确切来说来自于协同合作,以后我们会看到很多的开发工程师向设计师学习,只有在这种情况下,才能把设计更好地呈现。同样道理,设计师应该多向开发工程师学习,以理解哪些设计是可能实现的,为什么有些东西更难实现。 或者在这样的环境中,更多的设计师能更好地理解代码,而更多的开发工程师能更好地理解设计。
参考文献:
[1] 刘建中,蔡敏(译) 《设计模式》 机械工业出版社
Erich Gamma (著) 《Design Pattern》 China Machine Press
[2] 盛海艳 (译) 《GUI设计禁忌2.0》 机械工业出版社
Jeff Johnson (著) 《GUI Bloopers 2.0 Common User Interface Design Don’ts and Dos》 China Machine Press
[3] 徐言声 (译) 《设计模式解析》 人民邮电出版社
沙洛维 特罗特(著) 《Design Patterns Explained》 posts & telecom press
[4] 江建军,刘继光 (著)《Lab VIEW程序设计教程》 电子工业出版社
《Lab VIEW Program Design Methodology》 Publishing House of Electronics Industry
[5] 袁国忠 (译) 《面向模式的软件架构》 人民邮电出版社
Michael Kircher (著) 《Pattern-Oriented Software Architecture》 posts & telecom press
软件设计模式浅析
木子田心街
(河南 郑州)
摘 要:本文主要从设计模式的几个方面进行简单的概括和研究,从简单的工厂模式到Coordinator模式,以及对设计模式在未来的展望做出了进一步的分析和总结。
关键词:简单工厂模式;Coordinator模式;前景展望
Analysis of software design patterns
(Zhongyuan University of Technology ,Software Collage ,Zhengzhou Henan,China )
Abstract: In this paper, a simple summary and research from several design patterns, from simple factory pattern to the Coordinator pattern, and the design pattern in the future are analyzed and summarized further. Key words:simple factory; Coordinator; Prospect
1 设计模式概论
在软件设计模式的选择和使用中,本质上是要了解面向对象的,就面向对象而言,这是个复杂但又简单的过程,目前,面向对象的概念已经深入到计算机软件设计领域的几乎多有的分支,在面向对象程序设计中,对象是构成软件系统的基本单元。类是从相同类型的对象中抽象出的一种新型的数据类型,对象是类的实例。
首先在自己对主观意识上的理解,重要的是进行交流,在交流过程中,我认为如果计算机的体系结构不发生革命性的变化,我们现在所有应用的程序语言也就在百变不离奇踪了!精通一门编程语言后再去搞其他的编程语言,就会发现学习一种新的语法格式了。其中主要涉及到“类,对象,继承,属性,方法,静态,重载,隐藏,重构,声明,定义,初始化,赋值等”。
2 设计模式分类
软件设计模式是从一个复杂到简单的演变过程,现在的设计模式已经分工的越来越细,因此在对象的创建和使用中分开也成了最重的趋势。其中设计模式涵盖了几个重要的部分。
2.1 创建模式
简单的工厂模式(simple factory);抽象的工厂模式(abstract factory);创建者模式(builder);原型模式(prototype);单例模式(singleton)。
抽象的工厂模式(abstract factory)在使用相同一个工厂等级结构负责这些不同产品等级结构产品对象的创建。对于每一个产品族,都有一个具体工厂。而每一个具体工厂创建属于同一个产品族,但是分属于不同等级结构中的产品。通过引进抽象工厂模式,可以处理具有相同等级结构产品族中的对象创建问题。
例如一个抽象产品和一个产品类:
Public interface productB
{}
Public class productB1 implements productB
{
Public productB1()
{}}
2.2 结构型模式
在结构模式中,继承是随处可见的,但是每一种继承只适合封装一种变化,卖弄对多维变化场景时,如果仍然强行使用多继承来实现,必然会造成子类数目成飞速型增长问题,比如在桥模式中,通过简单的继承方式并不能很好地处理抽象化与实现独立变化的情况,但是通过对象组合的方式却可以很好适应此方面。主要分为以下几种模式。
外观模式(facade);适配器模式(adapter);代理模式(proxy);装饰模式(decorator);组合模式(composite);享元莫斯(flyweight)桥模式(bridge)。
2.3 行为型模式
行为模式设计到算法和对象间的职责分配,不仅描述对象或者类的模式,还
描述他们之间的通信方式。行为模式采用继承机制在类间分派行为,其他的行为对象常常将行为封装在一个对象中,并将请求指派给它,具体的模式有以下几种。
模版方法模式(template method);观察者模式(observer);状态模式(state);策略模式(strategy);职责链模式(chain of responsibility);命令模式(command);访问者模式(visitor);调停者模式(mediator);备忘录模式(memento);迭代器模式(iterator);解释器模式(interpreter)。
例如备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
图(1)memento
3 设计模式中面向对象的应用
在使用面向对象的时候,我们首先就要了解面向对象中的三要素:封装,继承和多肽。
在具体的实例中,比如说要绘制圆的程序,通过分析后可以得到,圆是这个问题的唯一事物。对于具体的圆,有的大些,有的小些,圆的位置也不尽相同,但是任何一个圆都可以使用圆心的横纵坐标和圆的半径这3个数据描述,因此这就是对圆这个事物的数据抽象,因此要画出圆,该程序还应该有设计圆的位置,半径大小,绘制圆形的功能。
3.1 面向对象具体设计
在面向模式的软件架构中,通过了简单的实例对资源管理进行程序化分析,
(1)Coordinator模式 该模式描述了如何协调完成设计多个参与者的任务,以保持系统的一致性。参与者可能是资源。资源用户及资源提供方。在任务涉及多个参与者时,这个模式提供的解决方案使得要么所有参与者都完成其工作,要么都不完成,从而确保系统始终处于一致的状态。首先在执行任务的多个参与者之间进行协调。在参与者之间分配任务,每个参与者独立地工作,确保整个任务成功完成。
对于面向对象中对象的实现,根据类的不容而不同,即类决定了对象是如何实现的。因为类定义数据的类型,包含对象的属性和方法,完成了对象所有需要的操作。面对象的创建无非是类实例化的结果。
(2)在实现的时候通过继承的类,这样就产生了有着同样借口的一组对象的类,如此设计对多态的十分重要。多态性就是多种表现形式,具体来说,可以用“一个对外借口,多个内在实现方法”表示。例如,在计算机的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现时一样的。针对不同的数据类型,编程人员不必手工选择,只需要使用统一借口名,系统可以自动选择,这样就可以在很大程度上降低了系统对实现模型的依赖性。
(3)其中Coordinator模式在结构上包含如下元素:
任务: 涉及多个参与者的工作单元。
参与者: 负责完成部分任务的活动实体,可以是资源用户。资源提供方及资源。
协调者 负责协调工作,确保整个任务得以完成的实体。
客户端:任务的发起者,直接命令协调者执行任务
运用类图说明这些元素之间的依赖关系:
图(2)类图的依赖关系
在具体实例中,交互始于客户端命令协调者开发执行任务。接下来,任务涉及的所有参与者都向协调者注册。然后,客户端命令协调者提交任务,此时协调者将要求每个参与者执行准备阶段。一方面,如果参与者指出准备阶段失败,协调者将中止整个任务。另一方面,如果所有参与者都成功了准备阶段,协调者将命令所有参与者都执行提交阶段。
4 前景展望
就当前情况下来看,软件设计模式精细分工已经是实在必行,从我个人的角度来看,随着现在软件行业应用程序和游戏软件的开发不断的壮大,个人能力在庞大而复杂的系统中,思想也有一定的局限性,能力和挑战性在不断的提高,尽管我们都相信技术型的操作会随着熟练的程度而提高,但是殊不知如果把项目分工下去将会大大的降低软件的开发成本,而且增强了软件的灵活性,在未来的发展中,软件设计模式将会更加的趋于完善。
确切来说来自于协同合作,以后我们会看到很多的开发工程师向设计师学习,只有在这种情况下,才能把设计更好地呈现。同样道理,设计师应该多向开发工程师学习,以理解哪些设计是可能实现的,为什么有些东西更难实现。 或者在这样的环境中,更多的设计师能更好地理解代码,而更多的开发工程师能更好地理解设计。
参考文献:
[1] 刘建中,蔡敏(译) 《设计模式》 机械工业出版社
Erich Gamma (著) 《Design Pattern》 China Machine Press
[2] 盛海艳 (译) 《GUI设计禁忌2.0》 机械工业出版社
Jeff Johnson (著) 《GUI Bloopers 2.0 Common User Interface Design Don’ts and Dos》 China Machine Press
[3] 徐言声 (译) 《设计模式解析》 人民邮电出版社
沙洛维 特罗特(著) 《Design Patterns Explained》 posts & telecom press
[4] 江建军,刘继光 (著)《Lab VIEW程序设计教程》 电子工业出版社
《Lab VIEW Program Design Methodology》 Publishing House of Electronics Industry
[5] 袁国忠 (译) 《面向模式的软件架构》 人民邮电出版社
Michael Kircher (著) 《Pattern-Oriented Software Architecture》 posts & telecom press