c++设计模式之外观模式
2015-06-05 15:59
344 查看
迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。
如果其中一个类需要调用另一个类的某一个方法的话,就可以通过第三者转发
迪米特法则的首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开
类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及,也就是说信息的隐藏促进了软件的复用
外观模式:
外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用
什么时候使用外观模式:
首先在设计初期阶段,应该要有意识的将不同的两个层分离
将复杂的子类系统封装到一个接口,统一进行管理,使得子类系统与用户间的耦合性大大降低
当开发大型的系统时,你可以为系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰的接口,让系统与Facade对象交互
[cpp] view
plaincopy
/*
外观模式就是将复杂的子类系统抽象到同一个的接口进行管理
,外界只需要通过此接口与子类系统进行交互,而不必要直接与复杂的子类
系统进行交互
*/
#include <iostream>
using namespace std;
/*这里定义四个子类系统*/
class SubSystemOne
{
public:
void MethorOne()
{
cout<<"子系统方法一"<<endl;
}
};
class SubSystemTwo
{
public:
void MethorTwo()
{
cout<<"子系统方法二"<<endl;
}
};
class SubSystemThree
{
public:
void MethorThree()
{
cout<<"子系统方法三"<<endl;
}
};
class SubSystemFour
{
public:
void MethorFour()
{
cout<<"子系统方法四"<<endl;
}
};
/*
外观类,接口
*/
class Facade
{
SubSystemOne *one;
SubSystemTwo *two;
SubSystemThree *three;
SubSystemFour *four;
/*构造函数*/
public:
Facade()
{
one = new SubSystemOne();
two = new SubSystemTwo();
three = new SubSystemThree();
four = new SubSystemFour();
}
void MethorA()
{
cout<<"方法组A()"<<endl;
one->MethorOne();
two->MethorTwo();
}
void MethorB()
{
cout<<"方法组B()"<<endl;
three->MethorThree();
four->MethorFour();
}
};
/*
客户端调用,客户端只需要与接口Facade交互就可以访问四个子类系统了
*/
void main()
{
Facade facade;
facade.MethorA();
facade.MethorB();
}
如果其中一个类需要调用另一个类的某一个方法的话,就可以通过第三者转发
迪米特法则的首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开
类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及,也就是说信息的隐藏促进了软件的复用
外观模式:
外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用
什么时候使用外观模式:
首先在设计初期阶段,应该要有意识的将不同的两个层分离
将复杂的子类系统封装到一个接口,统一进行管理,使得子类系统与用户间的耦合性大大降低
当开发大型的系统时,你可以为系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰的接口,让系统与Facade对象交互
[cpp] view
plaincopy
/*
外观模式就是将复杂的子类系统抽象到同一个的接口进行管理
,外界只需要通过此接口与子类系统进行交互,而不必要直接与复杂的子类
系统进行交互
*/
#include <iostream>
using namespace std;
/*这里定义四个子类系统*/
class SubSystemOne
{
public:
void MethorOne()
{
cout<<"子系统方法一"<<endl;
}
};
class SubSystemTwo
{
public:
void MethorTwo()
{
cout<<"子系统方法二"<<endl;
}
};
class SubSystemThree
{
public:
void MethorThree()
{
cout<<"子系统方法三"<<endl;
}
};
class SubSystemFour
{
public:
void MethorFour()
{
cout<<"子系统方法四"<<endl;
}
};
/*
外观类,接口
*/
class Facade
{
SubSystemOne *one;
SubSystemTwo *two;
SubSystemThree *three;
SubSystemFour *four;
/*构造函数*/
public:
Facade()
{
one = new SubSystemOne();
two = new SubSystemTwo();
three = new SubSystemThree();
four = new SubSystemFour();
}
void MethorA()
{
cout<<"方法组A()"<<endl;
one->MethorOne();
two->MethorTwo();
}
void MethorB()
{
cout<<"方法组B()"<<endl;
three->MethorThree();
four->MethorFour();
}
};
/*
客户端调用,客户端只需要与接口Facade交互就可以访问四个子类系统了
*/
void main()
{
Facade facade;
facade.MethorA();
facade.MethorB();
}
相关文章推荐
- C语言实现缓冲区溢出实例
- 如何利用VC++构建一个游戏框架
- 杭电2024:C语言合法标识符
- DevC++中使用boost简析
- 小计C/C++问题(1)
- MFC在其他线程中刷新主对话框中EDIT等控件数据
- C++友元函数(有缘分,咋都行!)
- C++多线程编程
- C++ libcurl 使用
- C++容器类和Qt容器类的对比
- 设计模式C++实现(9)——享元模式
- C++运算符重载
- C++类与内存
- 【Reverse Integer】cpp
- VC++ 的this关键字
- Effective C++ 46条 需要类型转换时请为模板定义非成员函数
- 防止资源泄漏
- vector中针对自定义类型的排序
- 一个例子演示了C++异常的推荐用法
- C++ STL 容器自定义内存分配器