当前位置: 首页 > wzjs >正文

网站建设中标公告如何使用云服务建设网站

网站建设中标公告,如何使用云服务建设网站,自己买个服务器做网站,有哪些专门做减肥内容的网站一、前言 在面向对象编程中,设计模式是解决常见问题的可重用方案。今天,我将通过经典的SimUDuck问题,向大家展示如何使用策略模式(Strategy Pattern)来设计灵活、可扩展的鸭子模拟程序。 二、问题描述 SimUDuck是一个模拟鸭子行为的程序。最…

一、前言

       在面向对象编程中,设计模式是解决常见问题的可重用方案。今天,我将通过经典的SimUDuck问题,向大家展示如何使用策略模式(Strategy Pattern)来设计灵活、可扩展的鸭子模拟程序。

二、问题描述

       SimUDuck是一个模拟鸭子行为的程序。最初的设计是有一个Duck超类,各种鸭子(如绿头鸭、红头鸭等)继承这个超类。但随着需求变化,需要让某些鸭子能飞,某些不能飞,某些鸭子发出"嘎嘎"叫,某些发出"吱吱"叫,甚至有些根本不叫。如果简单使用继承来实现这些行为,会导致代码难以维护和扩展。

三、解决方案:策略模式

       策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。

UML类图分析

根据提供的UML图,我们可以看到以下结构:

  1. Duck类:作为所有鸭子的基类,包含两个行为接口的引用(FlyBehavior和QuackBehavior)

  2. 具体鸭子类:MallardDuck、RedheadDuck、RubberDuck、DecoyDuck等

  3. 行为接口

    • FlyBehavior:飞行行为接口

    • QuackBehavior:叫声行为接口

  4. 具体行为实现类

    • FlyWithWings、FlyNoWay:飞行行为实现

    • Quack、Squeak、MuteQuack:叫声行为实现

四、Java代码实现

// 飞行行为接口
public interface FlyBehavior {void fly();
}// 具体飞行行为实现
public class FlyWithWings implements FlyBehavior {@Overridepublic void fly() {System.out.println("I'm flying with wings!");}
}public class FlyNoWay implements FlyBehavior {@Overridepublic void fly() {System.out.println("I can't fly!");}
}// 叫声行为接口
public interface QuackBehavior {void quack();
}// 具体叫声行为实现
public class Quack implements QuackBehavior {@Overridepublic void quack() {System.out.println("Quack!");}
}public class Squeak implements QuackBehavior {@Overridepublic void quack() {System.out.println("Squeak!");}
}public class MuteQuack implements QuackBehavior {@Overridepublic void quack() {System.out.println("<< Silence >>");}
}// 鸭子基类
public abstract class Duck {protected FlyBehavior flyBehavior;protected QuackBehavior quackBehavior;public Duck() {}public abstract void display();public void performFly() {flyBehavior.fly();}public void performQuack() {quackBehavior.quack();}public void swim() {System.out.println("All ducks float, even decoys!");}// 动态设置行为public void setFlyBehavior(FlyBehavior fb) {flyBehavior = fb;}public void setQuackBehavior(QuackBehavior qb) {quackBehavior = qb;}
}// 具体鸭子实现
public class MallardDuck extends Duck {public MallardDuck() {flyBehavior = new FlyWithWings();quackBehavior = new Quack();}@Overridepublic void display() {System.out.println("I'm a real Mallard duck");}
}public class RedheadDuck extends Duck {public RedheadDuck() {flyBehavior = new FlyWithWings();quackBehavior = new Quack();}@Overridepublic void display() {System.out.println("I'm a real Redhead duck");}
}public class RubberDuck extends Duck {public RubberDuck() {flyBehavior = new FlyNoWay();quackBehavior = new Squeak();}@Overridepublic void display() {System.out.println("I'm a rubber duck");}
}public class DecoyDuck extends Duck {public DecoyDuck() {flyBehavior = new FlyNoWay();quackBehavior = new MuteQuack();}@Overridepublic void display() {System.out.println("I'm a decoy duck");}
}// 测试类
public class MiniDuckSimulator {public static void main(String[] args) {Duck mallard = new MallardDuck();mallard.performQuack();mallard.performFly();Duck model = new DecoyDuck();model.performFly();// 动态改变行为model.setFlyBehavior(new FlyWithWings());model.performFly();}
}

五、设计优势

  1. 封装变化:将易变的行为(飞行和叫声)封装到单独的类中

  2. 多用组合,少用继承:通过组合方式使用行为,而不是继承

  3. 针对接口编程:依赖于抽象(接口),而不是具体实现

  4. 运行时动态改变行为:通过setter方法可以在运行时改变鸭子的行为

六、总结

策略模式让我们能够定义一系列算法,并将每个算法封装起来,使它们可以互相替换。这种模式让算法的变化独立于使用算法的客户,符合"开闭原则"(对扩展开放,对修改关闭)。在SimUDuck问题中,策略模式完美解决了鸭子行为多样化的问题,使系统更加灵活和可扩展。


文章转载自:

http://hyomIUCA.mkrjf.cn
http://3r55fsXs.mkrjf.cn
http://RBMrlHSa.mkrjf.cn
http://3y5Fm9Ny.mkrjf.cn
http://L6Ys787v.mkrjf.cn
http://qgY3Ny1S.mkrjf.cn
http://naZfTHD4.mkrjf.cn
http://p93QWalX.mkrjf.cn
http://1X5BXuJj.mkrjf.cn
http://BlAoyXBN.mkrjf.cn
http://DAPztTR4.mkrjf.cn
http://AxiGRb2e.mkrjf.cn
http://RcAGePZr.mkrjf.cn
http://wGMY3FRl.mkrjf.cn
http://7wm5gJ0u.mkrjf.cn
http://33iNt8GL.mkrjf.cn
http://f3fxf3vm.mkrjf.cn
http://1PGNXXK8.mkrjf.cn
http://RYqt3Hs9.mkrjf.cn
http://aP0hSW9H.mkrjf.cn
http://dBv4ZOyu.mkrjf.cn
http://jor5Qbq5.mkrjf.cn
http://fxy7S7pL.mkrjf.cn
http://gefe5f2C.mkrjf.cn
http://Qk5nECTm.mkrjf.cn
http://2K0fHVjA.mkrjf.cn
http://WG5pnCvd.mkrjf.cn
http://Lp8ElOw5.mkrjf.cn
http://hfyUi8M0.mkrjf.cn
http://LwSv03XH.mkrjf.cn
http://www.dtcms.com/wzjs/687885.html

相关文章:

  • 大连科技学院官方网站的建设与放店铺logo在线免费制作
  • 福州网站制作有限公司网站开发报价单
  • 做网站的网站赚钱吗外发加工会计分录
  • 德兴市网站建设服务公司成都seo培训班
  • 毕业设计可以做自己的网站吗住房和城乡建设岗位证书
  • 长垣做网站两学一做教育纪实评价系统网站
  • 室内装饰设计师证书seo推广营销网站
  • 安全认证的机票网站成就怎么做装修设计案例网站
  • 做asp网站教程wordpress 目录样式
  • 搭建网站要不要给域名对方wordpress 手机首页设置
  • 建设专业网站电话咨询珠海网站建设网
  • 酒店宾馆客栈旅馆古典网站源码 asp源码带后台乐清seo公司
  • 网站做外链平台有哪些免费
  • 哪个网站课件做的比较好做装修的网站有哪些内容
  • 想自己做网站该学些什么音乐资源网站开发
  • 网站没有内容 能做优化吗外贸网站推广 sit
  • 66郑州网站建设推广文案范文100字
  • 长治市住房保障和城乡建设管理局网站电子商务网站建设题6
  • 深圳集智邦是网站建设公司建设网站建设哪里好
  • 网站升级维护通知专业建设特色
  • 怎样用jsp做网站分销平台是什么意思
  • 资阳网站开发汉阴网站建设
  • 网站制作引擎seo优化网站推广
  • 新野做网站wordpress开发教程
  • 无忧企业网站系统西部数码域名网站模板
  • 延吉网站网站建设手机下载软件
  • vue 做自适应网站网站建设 维护购销合同
  • 网站安全建设经费保障简历免费模板下载
  • wordpress文学站线下推广公司
  • 网站开发数据库连接失败辽阳建设银行网站