首页 > 其他分享 >策略模式(strategy)

策略模式(strategy)

时间:2023-12-12 15:54:15浏览次数:27  
标签:DonaladDuck 策略 void 模式 strategy class pQuack new public

  1 #include <iostream>
  2 using namespace std;
  3 
  4 //设计思想:我们父类和子类就是一个扩展的关系?是不是合适
  5 //里氏代换原则:子类对象就应该能完全替代父类的行为
  6 //对于继承这样设计,特别小心,我们:组合大于继承
  7 //把quack和fly抽象成为一个对象,那么这个问题就了解决方案
  8 
  9 
 10 //////////////////////////
 11 //完成了将“动作”抽象成“对象”
 12 class QuackBehavior {
 13 public:
 14     virtual void quack() = 0;
 15 protected:
 16     QuackBehavior(){} 
 17 };
 18 class FlyBehavior {
 19 public:
 20     virtual void fly() = 0;
 21 protected:
 22     FlyBehavior(){}
 23 };
 24 
 25 class FlyWithRocket :public FlyBehavior {
 26     void fly() {
 27         cout << "做着火箭飞" << endl;
 28     }
 29 };
 30 
 31 class FlyWithWings :public FlyBehavior {
 32     void fly() {
 33         cout << "我有翅膀可以自己飞" << endl;
 34     }
 35 };
 36 
 37 class FlyWithNoWay :public FlyBehavior {
 38     void fly() {
 39         cout << "我根本就会飞" << endl;
 40     }
 41 };
 42 
 43 class ZhiZhiQuack :public QuackBehavior {
 44 public:    void quack() {
 45     cout << "吱吱" << endl;
 46     }
 47 };
 48 
 49 class PersonQuack :public QuackBehavior {
 50 public:
 51     void quack() {
 52         cout << "我是唐唐姥姥" << endl;
 53     }
 54 };
 55 
 56 class WigeonQuack :public QuackBehavior {
 57 public:
 58     void quack() {
 59         cout << "丑小鸭变天鹅" << endl;
 60     }
 61 };
 62 
 63 /////////////////////////////////////
 64 //Duck has a Quack 
 65 //     has a Fly
 66 class Duck {
 67 
 68 public:
 69     
 70     virtual void Display() = 0;
 71     void setFlyBehavior(FlyBehavior* fb) {
 72         m_pFly = fb;
 73     }
 74     void setQuackBehavior(QuackBehavior* qb) {
 75         m_pQuack = qb;
 76     }
 77 
 78     virtual void perfomrFly() {
 79         m_pFly->fly();
 80 
 81         //if (is 唐老鸭) {唐老鸭的飞行
 82         //if (is 小黄鸭){小黄鸭的飞行.....
 83     }
 84 
 85     virtual void performQuack() {
 86         m_pQuack->quack();
 87     }
 88 protected:
 89     QuackBehavior *m_pQuack;
 90     FlyBehavior *m_pFly;
 91 private:
 92 };
 93 //DonaladDuck is Duck
 94 class DonaladDuck :public Duck {
 95 public:
 96     DonaladDuck() {
 97         m_pFly = new FlyWithRocket;//某一个FlyBehavior的实例
 98         m_pQuack = new PersonQuack();
 99     }
100     void Display() {
101         perfomrFly();
102         performQuack();
103     }
104     
105 };
106 //第一个困境:子类似乎不太那么像父类。。。
107 class RuberDuck : public Duck {
108 public:
109     RuberDuck() {
110         m_pFly = new FlyWithNoWay();
111         m_pQuack = new ZhiZhiQuack();
112     }
113     void Display() {
114         perfomrFly();
115         performQuack();
116     }
117 };
118 
119 class WigeonDuck : public Duck {
120 public:
121     WigeonDuck() {
122         m_pFly = new FlyWithWings;
123         m_pQuack = new WigeonQuack;
124     }
125     void Display() {
126         perfomrFly();
127         performQuack();
128     }
129     
130 };
131 
132 int main() {
133     DonaladDuck *pDonlad = new DonaladDuck;
134     pDonlad->Display();
135     system("pause");
136     return 0;
137 }
138 //
139 class XiaoFeiXia :public Duck {
140     //
141     //m_pFly = new FlyWithHotPollun()
142 };
strategy.cpp

 

标签:DonaladDuck,策略,void,模式,strategy,class,pQuack,new,public
From: https://www.cnblogs.com/zeliangzhang/p/17897025.html

相关文章

  • 设计模式之单例模式:不同实现方式的深度解析
    什么是单例模式单例模式是一种常用的软件设计模式,其主要作用是保证某一个类只能有一个实例,并提供对该实例的全局访问点。单例模式有三个要点:1.某个类只能有一个实例。2.它必须自行创建这个实例。3.它必须自行向整个系统提供这个实例。单例模式的分类单例设计模式在具体实现......
  • 实保护模式、任务、任务内特权集切换
    保护模式是内核逆向、内核对抗基础。《80x86汇编汇编语言程序设计》第10章示例5清晰的展示了:实模式/保护模式的切换,任务内特权集切换,任务间切换的底层细节。保护模式学习代码笔记如下:;程序名:T10-5.ASM;功能:演示任务切换和任务内特权级变换;INCLUDE386SCD.ASM;参见实例三.3......
  • 设计模式—单例模式
    本文是关于设计模式中单例模式的Java代码实现详解懒汉式publicfinalclassSingleton{privatestaticSingletoninstance;publicStringvalue;privateSingleton(Stringvalue){this.value=value;}publicstaticSingletongetIns......
  • Java单例模式
    代码publicclassSamlUtil{privatestaticSamlUtilsamlUtil; privatestaticfinalObjectlock=newObject();privateSamlUtil(){ } publicstaticSamlUtilgetInstance(){ SamlUtiltemp=samlUtil; if(temp==null){ synchronized......
  • Fine-tuning: 一种针对大模型的优化策略
    在自然语言处理(NLP)领域,预训练模型已成为一种强大的工具,但其效果往往受到诸多因素的限制,包括模型大小、任务类型以及数据集等。针对这些问题,各种优化方法如微调(fine-tuning)、prompting等被相继提出。本文将深度解析P-tuningv2为何对大模型有效,主要体现在以下几个方面:一、连续提示的......
  • 内核模式
    内核模式Microsoft-用户模式和内核模式内核模式可以干什么用OpenArk查看Windows下所有快捷键的归属。WindowsDefender一般会要求用户打开内核隔离(MemoryIntegrity)。根据微软的描述:“如果内核模式驱动程序意外写入错误的虚拟地址,则属于操作系统或其他驱动程序的数......
  • 建造者模式
    建造者模式故名思意有两个重要的原色,一个是产品(product),即我们需要的某个目标类的对象,一个建造者(builder),当然你可以把建造者先抽象出一个的abstractbuilder,再继承一个具体的builder.最妙的一句是builder类再builder具体东西时,returnthis,这样在builder对象时,就可以使用User......
  • Redis内存淘汰策略
    Redis内存过期策略定时过期设置有效时间的key一旦过期,立马从内存中删除。好处就是内存及时释放,坏处就是不停扫描key,cpu消耗严重惰性过期设置有效时间的key过期,不立马删除key,而是等下一次查询到该key时执行删除动作。好处就是cpu消耗降低,坏处就是消耗内存定期过期每过一段时......
  • 武汉星起航电商智慧:优化运营策略,引领入驻者腾飞
        亚马逊平台作为全球最大的电商平台之一,涵盖了极其丰富的商品类别,包括服装、电子、家居、图书等。同时,亚马逊还提供了强大的营销工具和数据分析工具,为卖家提供了优越的条件来了解消费者需求和市场趋势。在这个充满机遇和挑战的市场背景下,武汉星起航电子商务有限公司充分发挥......
  • 23种设计模式——装饰者模式
    今天给大家说一下23种设计模式中装饰者模式。一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。这个时候,我们就需要用到装饰者模式了,它可以实现在不增加很多子类的情况下扩展类的功能。概念:装饰者模式(DecoratorPatt......