策略模式这样写

文章展示了如何在C++中使用策略模式来设计抽象类和具体实现类,通过策略模式,可以动态地改变对象的行为,例如不同类型的飞行为(Fly1)和叫声行为(Quack1)。MallarDuck类利用这种模式来实现其飞行和叫声的行为。
摘要由CSDN通过智能技术生成
#pragma once
#include"s.h"
//含虚函数的类,就是抽象类。//代替接口的功能
class strategy
{
public:
	strategy();
	~strategy();
	//接口声明的方法。提供接口,不提供实现
	virtual void fly() =0;
	//virtual void quack() ;
private:

};
class strategy2
{
public:
	strategy2();
	~strategy2();
	//接口声明的方法。提供接口,不提供实现
	//virtual void fly() {};
	virtual void quack()=0 ;
private:

};

//strategy::strategy()
//{
//}
//
//strategy::~strategy()
//{
//}
//飞的具体实现类,这是一个情况
class Fly1:public strategy
{
public:
	Fly1();
	~Fly1();
	void fly();
		
	
private:

};

//Fly1::Fly1()
//{
//}
//
//Fly1::~Fly1()
//{
//}
//这是叫的一种情况
class Quack1:public strategy2
{
public:
	Quack1();
	~Quack1();
	void quack();
	
private:

};
#include"strategy.h"
void Fly1::fly() {
	cout << "fei fei fei" << endl;
}
void Quack1::quack() {
	cout << "ga ga ga ga ga ga" << endl;
}
strategy::strategy()
{
}

strategy::~strategy()
{
}
strategy2::strategy2()
{
}

strategy2::~strategy2()
{
}
Fly1::Fly1()
{
}

Fly1::~Fly1()
{
}
Quack1::Quack1()
{
}

Quack1::~Quack1() {

}
#include"MallarDuck.h"
#include"s.h"
#include"strategy.h"
void MallarDuck::display(){
	cout << "i am MallarDuck" << endl;
}
MallarDuck::MallarDuck()
{
	//向上类型转换,父类的类型变为子类
	str1 = new Fly1();
	str2 = new Quack1();
}

MallarDuck::~MallarDuck()
{
}
#pragma once
#include"duck.h"
class MallarDuck:public duck
{
public:
	MallarDuck();
	~MallarDuck();
	void display();
private:

};
int main() {
	//RedhedDuck red = RedhedDuck();
	//MallarDuck mal = MallarDuck();
	//
	//red.display();
	//mal.display();
	//在父类加fly后,所有的子类对象都继承到了fly方法
	//red.fly();
	//mal.fly();
	//但是不是所有的鸭子都会飞,直接在父类中添加方法会出现所有的鸭子都会飞的情况。
	//RubberDuck rub = RubberDuck();
	//rub.display();
	//由于子类会变化,当吱吱叫的鸭子得覆盖父类的嘎嘎叫。当不会飞的鸭子得覆盖掉飞的方法。
	//rub.fly();
	//rub.quack();
	//处理的操作有在子类声明要覆盖的方法,再定义要覆盖的方法。1种行为不同就要修改2次代码。
	//当面对其余对象既不会嘎嘎叫,又不会飞。还得重新改变代码。当对象多而且行为多时,这就导致大量工作
	//DecoyDuck deo = DecoyDuck();
	//deo.fly();
	//deo.quack();
	//
duck *mall = new MallarDuck();
	mall->performfly();
	mall->performquack();
	//mall.display();
	duck* red = new RedhedDuck();
	red->performfly();
	red->performquack();
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值