设计模式之六 ------Bridge(桥接)
2012-10-20 16:31
225 查看
问题:在遇到不定的用户需求的时候,例如:设计一个文本修改器,刚开始我们设计txt和pdf格式的,可是后来我们要添加doc等格式。这样,为了以后软件的修改和扩充,我们该怎么如何设计呢?
解决方案:
把用户需求的抽象和实现分离,抽象部分运用组合方式把实现部分结合起来。这样,抽象部分和实现部分都可以独立的变化,而相互不影响;
源代码:
#include <IOSTREAM>
using namespace std;
/*在这个设计模式中,反复设计抽象与实现的概念;在此处抽象指:用户需求的抽象;实现指:用户需求的实现;
而不是一般的接口与实现的关系;*/
class Implementor{//功能的实现的抽象
protected:
Implementor(){};
public:
virtual void operatorImp()=0;
};
class ImplementorA:public Implementor{//实现需求A
public:
ImplementorA(){};
virtual void operatorImp()
{
cout<<"功能A实现"<<endl;
}
};
class ImplementorB:public Implementor{//实现需求B
public:
ImplementorB(){};
virtual void operatorImp()
{
cout<<"功能B实现"<<endl;
}
};
class Abstract{//用户需求的抽象
protected:
Abstract(){};
public:
virtual void Operator()=0;
};
class RefineAbstract:public Abstract{//用户需求的实现
public:
RefineAbstract(Implementor *imp)
{
implementor=imp;
}
virtual void Operator()
{
implementor->operatorImp();
}
~RefineAbstract()
{
if(implementor!=NULL)
{
delete implementor;
implementor=NULL;
}
}
private:
Implementor * implementor;
};
void main()
{
Implementor *impA=new ImplementorA();
Implementor *impB=new ImplementorB();
Abstract *abstract=new RefineAbstract(impA);
abstract->Operator();
delete abstract;
abstract=new RefineAbstract(impB);
abstract->Operator();
delete abstract;
}
软件工程设计方法----总结
上世纪60年代爆发了众所周知的软件危机,为了克服这一危机,于是诞生软件工程,进而形成了软件开发方法,至今可归结为8中:
一、Parnas方法
由于当时软件在可维护性和可靠性方面存在着严重问题,因此Parnas提出的方法是针对这两个问题的。Parnas提出了信息隐蔽原则:在概要设计时列出将来可能发生变化的因素,并在模块划分时将这些因素放到个别模块的内部。 现在信息隐蔽原则已成为软件工程学中的一条重要原则。 Parnas提出的第二条原则是在软件设计时应对可能发生的种种意外故障采取措施。 他没有给出明确的工作流程。所以这一方法不能独立使用,只能作为其它方法的补充。
二、 SASD
SASD既结构分析结构设计方法,也是面向数据流的开发方法,。它首先用结构化分析(SA)对软件进行需求分析,然后用结构化设计(SD)方法进行总体设计,最后是结构化编程(SP)。这一方法不仅开发步骤明确,SA、SD、SP相辅相成,一气呵成,而且给出了两类典型的软件结构(变换型和事务型)
三、 面向数据结构的软件开发方法
Jackson方法
这一方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,就可得到完整的程序结构图。 Jackson设计方法是一种面向数据结构的软件设计方法,Jackson分析方法是面向数据流的分析方法。
Warnier方法
与Jackson方法类似
四、 问题分析法
PAM方法希望能兼顾Yourdon方法、Jackson方法和自底向上的软件开发方法的优点,而避免它们的缺陷。它的基本思想是:考虑到输入、输出数据结构,指导系统的分解,在系统分析指导下逐步综合。
五、 面向对象的软件开发方法
随着OOP(面向对象编程)向OOD(面向对象设计)和OOA(面向对象分析)的发展,最终形成面向对象的软件开发方法OMT(Object Modelling Technique)。这是一种自底向上和自顶向下相结合的方法,而且它以对象建模为基础,从而不仅考虑了输入、输出数据结构,实际上也包含了所有对象的数据结构。
六、 可视化开发方法
可视化开发就是在可视开发工具提供的图形用户界面上,通过操作界面元素,诸如菜单、按钮、对话框、编辑框、单选框、复选框、列表框和滚动条等,由可视开发工具自动生成应用软件。
七、 ICASE
ICASE(Integrated Computer-Aided Software Engineering) 的最终目标是实现应用软件的全自动开发,即开发人员只要写好软件的需求规格说明书,软件开发环境就自动完成从需求分析开始的所有的软件开发工作,自动生成供用户直接使用的软件及有关文档。
八、软件重用和组件连接
件重用是利用已有的软件成份来构造新的软件。它可以大大减少软件开发所需的费用和时间,且有利于提高软件的可维护性和可靠性。
解决方案:
把用户需求的抽象和实现分离,抽象部分运用组合方式把实现部分结合起来。这样,抽象部分和实现部分都可以独立的变化,而相互不影响;
源代码:
#include <IOSTREAM>
using namespace std;
/*在这个设计模式中,反复设计抽象与实现的概念;在此处抽象指:用户需求的抽象;实现指:用户需求的实现;
而不是一般的接口与实现的关系;*/
class Implementor{//功能的实现的抽象
protected:
Implementor(){};
public:
virtual void operatorImp()=0;
};
class ImplementorA:public Implementor{//实现需求A
public:
ImplementorA(){};
virtual void operatorImp()
{
cout<<"功能A实现"<<endl;
}
};
class ImplementorB:public Implementor{//实现需求B
public:
ImplementorB(){};
virtual void operatorImp()
{
cout<<"功能B实现"<<endl;
}
};
class Abstract{//用户需求的抽象
protected:
Abstract(){};
public:
virtual void Operator()=0;
};
class RefineAbstract:public Abstract{//用户需求的实现
public:
RefineAbstract(Implementor *imp)
{
implementor=imp;
}
virtual void Operator()
{
implementor->operatorImp();
}
~RefineAbstract()
{
if(implementor!=NULL)
{
delete implementor;
implementor=NULL;
}
}
private:
Implementor * implementor;
};
void main()
{
Implementor *impA=new ImplementorA();
Implementor *impB=new ImplementorB();
Abstract *abstract=new RefineAbstract(impA);
abstract->Operator();
delete abstract;
abstract=new RefineAbstract(impB);
abstract->Operator();
delete abstract;
}
软件工程设计方法----总结
上世纪60年代爆发了众所周知的软件危机,为了克服这一危机,于是诞生软件工程,进而形成了软件开发方法,至今可归结为8中:
一、Parnas方法
由于当时软件在可维护性和可靠性方面存在着严重问题,因此Parnas提出的方法是针对这两个问题的。Parnas提出了信息隐蔽原则:在概要设计时列出将来可能发生变化的因素,并在模块划分时将这些因素放到个别模块的内部。 现在信息隐蔽原则已成为软件工程学中的一条重要原则。 Parnas提出的第二条原则是在软件设计时应对可能发生的种种意外故障采取措施。 他没有给出明确的工作流程。所以这一方法不能独立使用,只能作为其它方法的补充。
二、 SASD
SASD既结构分析结构设计方法,也是面向数据流的开发方法,。它首先用结构化分析(SA)对软件进行需求分析,然后用结构化设计(SD)方法进行总体设计,最后是结构化编程(SP)。这一方法不仅开发步骤明确,SA、SD、SP相辅相成,一气呵成,而且给出了两类典型的软件结构(变换型和事务型)
三、 面向数据结构的软件开发方法
Jackson方法
这一方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,就可得到完整的程序结构图。 Jackson设计方法是一种面向数据结构的软件设计方法,Jackson分析方法是面向数据流的分析方法。
Warnier方法
与Jackson方法类似
四、 问题分析法
PAM方法希望能兼顾Yourdon方法、Jackson方法和自底向上的软件开发方法的优点,而避免它们的缺陷。它的基本思想是:考虑到输入、输出数据结构,指导系统的分解,在系统分析指导下逐步综合。
五、 面向对象的软件开发方法
随着OOP(面向对象编程)向OOD(面向对象设计)和OOA(面向对象分析)的发展,最终形成面向对象的软件开发方法OMT(Object Modelling Technique)。这是一种自底向上和自顶向下相结合的方法,而且它以对象建模为基础,从而不仅考虑了输入、输出数据结构,实际上也包含了所有对象的数据结构。
六、 可视化开发方法
可视化开发就是在可视开发工具提供的图形用户界面上,通过操作界面元素,诸如菜单、按钮、对话框、编辑框、单选框、复选框、列表框和滚动条等,由可视开发工具自动生成应用软件。
七、 ICASE
ICASE(Integrated Computer-Aided Software Engineering) 的最终目标是实现应用软件的全自动开发,即开发人员只要写好软件的需求规格说明书,软件开发环境就自动完成从需求分析开始的所有的软件开发工作,自动生成供用户直接使用的软件及有关文档。
八、软件重用和组件连接
件重用是利用已有的软件成份来构造新的软件。它可以大大减少软件开发所需的费用和时间,且有利于提高软件的可维护性和可靠性。
相关文章推荐
- 设计模式一日一练:桥接模式(Bridge)
- 设计模式-结构型- 桥接模式(Bridge)
- 设计模式(3)-结构型-桥接模式(Bridge)
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
- 设计模式之桥接模式 Bridge
- 23种设计模式(7)_结构型_桥接模式(Bridge Pattern)
- 设计模式之桥接模式(Bridge)
- 设计模式-----桥接模式(Bridge Pattern)
- .NET设计模式(9):桥接模式(Bridge Pattern)
- 设计模式 - 桥接模式(BRIDGE)
- java23种设计模式--桥接模式(bridge)
- 设计模式 Bridge 桥接模式
- 设计模式八:bridge(桥接)——对象结构型模式
- IOS 设计模式 桥接模式(bridge)
- IOS设计模式浅析之桥接模式(Bridge)
- .NET设计模式-桥接模式(Bridge Pattern)
- 设计模式--桥接模式(Bridge)
- 设计模式-----桥接模式(Bridge Pattern)
- 设计模式-结构性模式:桥接模式 Bridge
- [工作中的设计模式]桥接模式bridge