现在需要新增一种鸭子,但这个鸭子是一个玩具橡皮鸭,我们按照继承的方式则橡皮鸭实现代码如下 publci class RubberDuck:Duck{ public override void qucak...但是问题出现了,橡皮鸭是不会飞的,于是我们可以像覆盖qucak方法一样在RubberDuck中覆盖fly方法。...{} public void swin(){} public abstract void display(); public void fly(){} } publci class RubberDuck...= new RubberDuck(); 111 rubberDuck.display(); 112 rubberDuck.PerFormQuack();...113 rubberDuck.PerFormFly(); 114 Console.ReadKey(); 115 } ?
适配器模式 首先我们从制造一个屏幕模拟器开始,模拟鸭子叫,根据需求我们先定义 Quackable接口,然后分别定义MallarDuck、RedheadDuck、RubberDuck、DuckCall等不同的鸭子实现呱呱叫接口...@Override public void quack() { System.out.println("红头鸭呱呱叫..."); } } public class RubberDuck...redheadDuck = new RedheadDuck(); Quackable mallarDuck = new MallarDuck(); Quackable rubberDuck...= new RubberDuck(); Quackable duckCall = new DuckCall(); GooseAdapter gooseAdapter =...= new QuackCounter(new RubberDuck()); Quackable duckCall = new QuackCounter(new DuckCall());
System.out.println("红头鸭的外貌特征"); } } /** * @description 橡皮鸭 * @author: muse **/ public class RubberDuck...author: muse **/ public class StrategyTest { public static void main(String[] args) { Duck rubberDuck...= new RubberDuck(); // 生成橡皮鸭 rubberDuck.display(); rubberDuck.performFly();...System.out.println("-----------对橡皮鸭进行改造,让它能飞起来------------"); rubberDuck.setFlyBehavior...(new FlyWithWings()); // 更换会飞的算法族 rubberDuck.performFly(); } } 今天的文章内容就这些了: 写作不易,笔者几个小时甚至数天完成的一篇文章
System.out.println("红头鸭的外貌特征"); }}/** * @description 橡皮鸭 * @author: muse **/public class RubberDuck...author: muse **/public class StrategyTest { public static void main(String[] args) { Duck rubberDuck... = new RubberDuck(); // 生成橡皮鸭 rubberDuck.display(); rubberDuck.performFly(); ...System.out.println("-----------对橡皮鸭进行改造,让它能飞起来------------"); rubberDuck.setFlyBehavior...(new FlyWithWings()); // 更换会飞的算法族 rubberDuck.performFly(); }}今天的文章内容就这些了:写作不易,笔者几个小时甚至数天完成的一篇文章
itemName=Codeium.codeium 5、Rubberduck Rubberduck是一个让您能够与代码和软件开发话题进行交流的扩展。...Rubberduck提供以下主要功能: 与代码交流:Rubberduck允许您与代码进行对话,提出问题或讨论开发话题。您可以寻求建议、解释和指导,以加强对代码的理解和开发过程的改进。...代码解释和测试生成:Rubberduck支持解释代码的功能,可以帮助您理解复杂的代码逻辑。此外,它还可以生成测试代码,帮助您进行单元测试和代码覆盖率的提升。...itemName=Rubberduck.rubberduck-vscode 6、OpenAI OpenAI是一个优秀的工具,可以让您直接从代码编辑器中访问OpenAI的功能。
按照前面的思维,我们顺其自然的让新的类RubberDuck继承基类Duck,但是橡皮鸭不能飞,叫的声音也和绿头野鸭和红头鸭不一样,于是我们需要在RubberDuck重写基类的fly和quack方法。...class RubberDuck:public Duck{ public: virtual void fly(){ cout<<"我不能飞行"<<endl; }...将行为类对象作为鸭子类的数据成员,并提供动态改变行为的方法,具体实现如下: //橡胶鸭类 class RubberDuck { private: FlyBehavior* flyBehavior...; QuackBehavior* quackBehavior; public: RubberDuck() { flyBehavior = new FlyNoWay();
}}class RedHeadDuck : public Duck{public: virtual void display(void){ // 外观是红头 }}class RubberDuck...为了避免这种情况,需要在RubberDuck子类中将fly()方法重写。当前情况下这么修改是可以接受的。...public Duck{public: RedHeadDuck(){ pFlyBehavior = new FlyWithWings; } // ...}class RubberDuck...: public Duck{public: RubberDuck(){ pFlyBehavior = new FlyNoWay; } // ...}在构造函数中,不同的子类获得了对应的
.>; type RubberDuck = Duck; type DecoyDuck = Duck; /// 动多态因“类型丢失”,只能使用NewType,并在NewType中约束...struct MallardDuck(DynamicDuck); struct RubberDuck(DynamicDuck); struct DecoyDuck(DynamicDuck); ///...为了解决这个问题,各种奇招就来了,如不管三七二十一,先把捕猎行为塞进Duck中,管其它鸭子会不会错用呢;或者,为橡皮鸭RubberDuck、木头鸭WoodDuck也实现个假的捕猎,这样“捕猎”就又符合新的策略了...但我不建议普通的策略模式这样实现,将Fly和Quack组合起来的Duck,不再是飞行策略实现的一种变体,要是RubberDuck也能因满足Fly特型约束,再次充当Duck自己的“翅膀”F,组合成一个新Duck
function setFlyBehavior(FlyBehavior $behavior){ $this->_flyBehavior = $behavior; } } class RubberDuck...extends Duck{ } // Test Case $duck = new RubberDuck(); /* 想让鸭子用翅膀飞行 */ $duck->setFlyBehavior(new
1 public class RubberDuck : Quackable 2 { 3 public void Quack() 4 { 5...20 21 public override Quackable CreateRubberDuck() 22 { 23 return new RubberDuck...public override Quackable CreateRubberDuck() 39 { 40 return new QuackCounter(new RubberDuck
public function setFlyBehavior(FlyBehavior $behavior){ $this- _flyBehavior = $behavior; } } class RubberDuck...extends Duck{ } // Test Case $duck = new RubberDuck(); /* 想让鸭子用翅膀飞行 */ $duck- setFlyBehavior(new FlyWithWings
游泳高手"); } } package 设计模式; /** * @author yuanxindong * @date 2020/7/4 12:55 上午 */ public class RubberDuck
MallardDuck(); } else if (hunting) { duck = new DecoyDuck(); } else if (inBathTub) { duck = new RubberDuck
Downloads cached for licensed users livecontactsview 1.26 [Approved] Downloads cached for licensed users rubberduck
领取专属 10元无门槛券
手把手带您无忧上云