【4】代理模式

场景:

设计场景:男孩暗恋女孩 ,但女孩不认识男孩,男孩的伙伴认识女孩,于是男孩委托伙伴向女孩送花


解决方案:

设计模式:使用代理模式,将送礼物作为追求者和代理的公共接口。
抽象类:类中至少有一个纯虚函数,抽象类不能生成对象,作为父类,其子类必须实现纯虚函数的定义,否则子类成为抽象类,纯虚函数实现定义后成为虚函数。
接口:是一种特殊的抽象类,类中没有定义任何的成员变量,所有的成员函数都是公有的,所有的成员函数都是纯虚函数。


代码如下:

#include"schoolGirl.h"
#include"proxy.h"

using namespace std;

// 代理模式
int main()
{
	// create Girl
	SchoolGirl* nana = new SchoolGirl();
	nana->setName("NANA");
	// create Proxy
	Proxy* proxy = new Proxy(nana); // nana 不认识 pursuit ,proxy 作为红线
	proxy->sendFlower();

	system("pause");
	return 0;
}
#pragma once
#include<string>

// 被追求者类
class SchoolGirl
{
public:
	std::string getName() { return m_name; }
	void setName(std::string name) { m_name = name; }
private:
	std::string m_name;
};

#pragma once

// 接口
class SendGift
{
public:
	virtual void sendFlower() = 0; // 纯虚函数
};

#pragma once
#include"sendGift.h"
#include"pursuit.h"
#include"schoolGirl.h"


// 代理类
class Proxy : public SendGift
{
public:
	Proxy(){}
	Proxy(SchoolGirl* girl )
	{
		// 将 girl 传递给 pursuit
		m_pursuit = new Pursuit(girl);
	}
	// 送花
	void sendFlower() override
	{
		// 调用追求者
		m_pursuit->sendFlower();
	}
private:
	Pursuit* m_pursuit = nullptr;
};

#pragma once
#include"sendGift.h"
#include"schoolGirl.h"

#include<iostream>

// 追求者类
class Pursuit : public SendGift
{
public:
	Pursuit(){}
	Pursuit(SchoolGirl* girl)
	{
		m_girl = girl;
	}
	void sendFlower() override
	{
		std::cout << m_girl->getName()<< "送你鲜花" << std::endl;
	}
private:
	SchoolGirl* m_girl = nullptr;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值