外观模式与单件模式的举例
来源:互联网 发布:淘宝李涛是真是假 编辑:程序博客网 时间:2024/05/01 10:32
#include <iostream>
#include <string>
using namespace std;
//外观模式与单件模式的举例
//外观模式主要用于在一个子系统提供统一的接口,减少类与类之间的耦合
//在外观模式中,对于类而言,成员函数,我们称之为方法 ,对于子系统而言,我们称之为对外的接口
//单件模式中,只允许有一个类的实例
//此处,子系统是Facade(外观类)与Message(消息类),由外观类Facade提供统一的接口
//Message类,为了演示简单,只定义了一个属性,和改变属性的接口。
//Message类为一个抽象类,具体的实现由其派生类实现
class Message
{
public:
Message():stext(""){}
Message(string settext):stext(settext){}
~Message(){}
virtual string GetString()=0;
virtual void SetString(const string &settext)=0;
protected:
string stext;//消息类内容
};
//Facade承担了外观类,作为系统的统一接口,并且用于管理子系统
class Facade
{
public:
~Facade()
{
//单件类中的实例一般为动态构造,因此,需要回收内存
if (Facade::facade!=NULL)
{
delete [] Facade::facade;
}
}
string GetString()//子系统对外的接口之一
{
//实际通过C++的动态多态性原理,调用实际的GetString()方法
return message->GetString();
}
void SetString(const string &settext)//子系统对外的接口之一
{
//同上
message->SetString(settext);
}
void PrintMessage()
{
//仅仅为了演示,可直接在子系统的外部,通过GetString()接口访问
cout<<GetString()<<endl;
}
static Facade *GetFacade(Message *messagein);//单件类所需要的静态成员方法
private:
static Message* message;//单件类的实例对像为了指针,并且为静态类型
static Facade* facade;
protected:
Facade(){}
};
Facade* Facade::facade=NULL;//C++中对静态成员的初始化方法
Message* Facade::message=NULL;
Facade* Facade::GetFacade(Message *messagein)
{
//获取单件类的常规方法
if ( !Facade::facade )
{
facade=new Facade();
Facade::message=messagein;
}
return facade;
}
//Messaeg的派生类,用于演示程序
class MyMessage:public Message
{
public:
MyMessage(string settext):Message(settext){}
string GetString(){return stext;}//实现具体的方法
void SetString(const string &settext){stext=settext;}
};
int main(int argc,char **argv)
{
MyMessage message("I am liuyan");
Facade::GetFacade(&message)->PrintMessage();
return 0;
}
- 外观模式与单件模式的举例
- 全局变量与单件模式
- 单件模式的疑惑
- php5的单件模式
- C++的单件模式
- 【单件模式】的优点
- 什么是单例模式?单例模式的举例
- 状态模式与外观模式的碰撞
- 状态模式与外观模式的碰撞
- 单件模式与智能指针、友元类的结合
- 设计模式(单例模式、外观模式)
- 数据库连接池之外观模式+单例模式的实现
- 使用单件注册表的单件模式例子
- 设计模式------单件模式
- 设计模式--单件模式
- 设计模式 -- 单件模式
- 设计模式:单件模式
- 设计模式-单件模式
- 类图关系速查
- ios ipod library 读,写,等常见管理方法
- 【POJ1179】Polygon (动态规划 DP)
- what is first-order language
- CRC 面向对象设计
- 外观模式与单件模式的举例
- NIO修改文件局部数据
- 关于yuv的文档
- Mule的实例运行
- UNION 和UNION ALL 的区别
- 用WinInet实现Ftp传输
- 等待Win8……
- 。net中几个经常用到的字符串的截取
- Big 5 Code Table