#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();
}
策略模式这样写
最新推荐文章于 2024-11-02 14:05:25 发布
文章展示了如何在C++中使用策略模式来设计抽象类和具体实现类,通过策略模式,可以动态地改变对象的行为,例如不同类型的飞行为(Fly1)和叫声行为(Quack1)。MallarDuck类利用这种模式来实现其飞行和叫声的行为。
摘要由CSDN通过智能技术生成