设计模式-装饰模式
来源:互联网 发布:github for mac 下载 编辑:程序博客网 时间:2024/05/29 13:35
结构型模式-装饰模式
模式描述:通过比生成子类更灵活的方式动态的给对象添加功能。
代码实现(装饰一个房屋)
//C++
class House
{
public:
House(){}
~House(){}
House(string house) { m_house = house; }
virtual void Show() { cout << m_house << endl; }
private:
string m_house;
};
class Instal : public House
{
public:
void Decorate(House* component) { m_component = component; }//通过该装饰方法可以动态为其子类对象串联地添加功能
virtual void Show() { m_component->Show(); }
protected:
House* m_component;
};
class HousWithWindow : public Instal
{
public:
virtual void Show()
{
cout << "安装窗户" << endl;
m_component->Show();
}
};
class HousWithDoor : public Instal
{
public:
virtual void Show()
{
cout << "安装门" << endl;
m_component->Show();
}
};
//动态且顺序地为房屋装饰窗户和门
int main()
{
House* house = new House("没有门窗的房屋");//没有门窗的房屋
HousWithWindow* window = new HousWithWindow();
HousWithDoor* door = new HousWithDoor();
window->Decorate(house);//将窗户安装在没有门窗的房屋
door->Decorate(window);//将门安装在有窗户却没有门的房屋
door->Show();//door对象即为添加了窗户和门的房屋对象
return 0;
}
//模式实现过程中没有修改接口,遵循了面向对象设计的闭合原则;模式实现了动态地选择对象装饰,使装饰过程灵活的功能,降低了对象之间的耦合性。
模式描述:通过比生成子类更灵活的方式动态的给对象添加功能。
代码实现(装饰一个房屋)
//C++
class House
{
public:
House(){}
~House(){}
House(string house) { m_house = house; }
virtual void Show() { cout << m_house << endl; }
private:
string m_house;
};
class Instal : public House
{
public:
void Decorate(House* component) { m_component = component; }//通过该装饰方法可以动态为其子类对象串联地添加功能
virtual void Show() { m_component->Show(); }
protected:
House* m_component;
};
class HousWithWindow : public Instal
{
public:
virtual void Show()
{
cout << "安装窗户" << endl;
m_component->Show();
}
};
class HousWithDoor : public Instal
{
public:
virtual void Show()
{
cout << "安装门" << endl;
m_component->Show();
}
};
//动态且顺序地为房屋装饰窗户和门
int main()
{
House* house = new House("没有门窗的房屋");//没有门窗的房屋
HousWithWindow* window = new HousWithWindow();
HousWithDoor* door = new HousWithDoor();
window->Decorate(house);//将窗户安装在没有门窗的房屋
door->Decorate(window);//将门安装在有窗户却没有门的房屋
door->Show();//door对象即为添加了窗户和门的房屋对象
return 0;
}
//模式实现过程中没有修改接口,遵循了面向对象设计的闭合原则;模式实现了动态地选择对象装饰,使装饰过程灵活的功能,降低了对象之间的耦合性。
- 设计模式---装饰模式
- 设计模式:装饰模式
- 设计模式------装饰模式
- 设计模式--装饰模式
- 设计模式--装饰模式
- 设计模式--装饰模式
- 设计模式 装饰模式
- 设计模式----装饰模式
- 设计模式-【装饰模式】
- 设计模式--装饰模式
- 设计模式装饰模式
- 设计模式 - 装饰模式
- 设计模式-----装饰模式.
- 设计模式-----装饰模式.
- [ 设计模式 ] 装饰模式!
- 设计模式:装饰模式
- 设计模式 - 装饰模式
- 设计模式 - 装饰模式
- linux下搭建LAMP
- 题目1005:Graduate Admission
- 自定义ListView【通用】适配器并实现监听控件!
- IBM又发力 开发出突破性超小型毫米波芯片阵列
- JavaScript:数组的创建
- 设计模式-装饰模式
- 使用eclipse中自带的tomcat找不到发布的应用路径
- 第十章 名称解析
- 格式工厂—视频剪辑
- Android系统onKeyDown监控/拦截/监听/屏蔽返回键、菜单键和Home
- Daily-C-Study(21):C语言#和##运算符
- Linux内核--内核地址空间分布和进程地址空间
- 设计模式之 再说单例模式
- Android中对数据库进行CRUD操作手写SQL语句方式