装饰模式

本文通过装修房子的例子,详细介绍了装饰模式的概念及其在软件设计中的应用。装饰模式允许在不修改原始类的情况下,动态地给对象添加新的功能,符合开放封闭原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一年又一年,元宵节到了,看看电视,吃吃汤圆,听听远处阵阵传来鞭炮声,给“年”说拜拜了。。。

言归正传,大家一起学习装饰模式,从字面意思来说,就是装饰一个对象,给一个对象扩展一新的功能或者职责。比如说我们现在要装修一个房子,我们要先铺地板,铺水管,装灯等等,但总有一些事情我们想不到。在遵守“开放-封闭”原则下,可以通过继承子类,扩展父类功能,也可以通过装饰模式,更方便的扩展对象的功能。接下里来实现这个装修房子的类,具体代码如下:

//抽象类
#ifndef _COMPONET_H
#define _COMPONET_H

class Component
{
public:
	virtual ~Component()
	{

	}

	virtual void Operation() = 0;
protected:
	Component()
	{

	}
};
#endif
//装修房子类---头文件
#pragma once
#include "Componet.h"
class CHouseComponent :
	public Component
{
public:
	CHouseComponent();
	~CHouseComponent();
	virtual void Operation();
};


//装修房子类---cpp
#include "housecomponent.h"

#include <iostream>
using namespace std;

CHouseComponent::CHouseComponent()
{
}


CHouseComponent::~CHouseComponent()
{
}

void CHouseComponent::Operation()
{
	cout << "装修房子了..." << endl;
	cout << "铺电线..." << endl;
	cout << "铺水管..." << endl;
}
//装饰基类---头文件
#pragma once
#include "Componet.h"
class CDecorator :
	public Component
{
public:
	~CDecorator();
	virtual void Operation();
	void setComponent(Component* component);
protected:
	CDecorator();
protected:
	Component* mpComponent;
};


//装饰基类---cpp
#include "decorator.h"


CDecorator::CDecorator()
{
	mpComponent = nullptr;
}


CDecorator::~CDecorator()
{
}

void CDecorator::Operation()
{
	if (mpComponent != nullptr)
	{
		mpComponent->Operation();
	}
}

void CDecorator::setComponent(Component* component)
{
	mpComponent = component;
}
//地板装饰类--头文件
#pragma once
#include "decorator.h"
class CFloorDecorator :
	public CDecorator
{
public:
	CFloorDecorator();
	~CFloorDecorator();
	virtual void Operation();

};

//地板装饰类--头文件

#include "floordecorator.h"
#include <iostream>
using namespace std;


CFloorDecorator::CFloorDecorator()
{
}


CFloorDecorator::~CFloorDecorator()
{
}


void CFloorDecorator::Operation()
{
	CDecorator::Operation();
	cout << "铺地板..." << endl;
}

//调用
#include <iostream>
using namespace std;
#include "housecomponent.h"
#include "floordecorator.h"

void main()
{
	CHouseComponent* pHouseComponent = new CHouseComponent();
	CFloorDecorator* pFloorDecorator = new CFloorDecorator();
	pFloorDecorator->setComponent(pHouseComponent);

	pFloorDecorator->Operation();
	cin.get();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值