2201_75340854 2024-03-09 16:00 采纳率: 31.8%
浏览 9

有人会做这个不,搞来搞去都不会

有人会做这个不,搞来搞去都不会,第一次学这个,看书也没看明白

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-09 16:01
    关注

    引自免费微信小程序:皆我百晓生

    针对您提出的问题,您想要实现SimUDuck问题的简单工厂模式设计。在该设计中,Duck是一个接口(或抽象类),它封装了鸭子的行为方法如fly(), quack()以及设置行为的方法如setFlyBehavior(FlyBehavior fb)setQuackBehavior(QuackBehavior qb)。FlyBehavior和QuackBehavior是两个行为接口,不同的具体实现代表不同的飞行方式和叫声。

    以下是基于Java的简单实现:

    // 行为接口定义
    interface FlyBehavior {
        void fly();
    }
    
    interface QuackBehavior {
        void quack();
    }
    
    // 抽象鸭子类,定义基本行为
    abstract class Duck {
        FlyBehavior flyBehavior;
        QuackBehavior quackBehavior;
    
        public void setFlyBehavior(FlyBehavior fb) {
            this.flyBehavior = fb;
        }
    
        public void setQuackBehavior(QuackBehavior qb) {
        this.quackBehavior = qb;
        }
    
        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!");
        }
    }
    
    // 具体飞行行为实现
    class FlyWithWings implements FlyBehavior {
        @Override
        public void fly() {
            System.out.println("I'm flying!!");
        }
    }
    
    class FlyNoWay implements FlyBehavior {
        @Override
        public void fly() {
            System.out.println("I can't fly");
        }
    }
    
    // 具体叫声行为实现
    class Quack implements QuackBehavior {
        @Override
        public void quack() {
            System.out.println("Quack-quack!!");
        }
    }
    
    class Squeak implements QuackBehavior {
        @Override
        public void quack() {
            System.out.println("Squeak-squeak!!");
        }
    }
    
    class MuteQuack implements QuackBehavior {
        @Override
        public void quack() {
            // 不发出声音
        }
    }
    
    // 具体鸭子类
    class MallardDuck extends Duck {
        public MallardDuck() {
            flyBehavior = new FlyWithWings();
            quackBehavior = new Quack();
        }
    
        @Override
        public void display() {
            System.out.println("I'm a mallard duck");
        }
    }
    
    // 同理,可以定义RedheadDuck, RubberDuck, DecoyDuck等其他具体鸭子类,并初始化对应的行为
    
    // 简单工厂类(可选)
    class DuckFactory {
        public static Duck createDuck(String type) {
            if ("MallardDuck".equals(type)) {
                return new MallardDuck();
            } else if ("RedheadDuck".equals(type)) { 
                // 实例化并返回RedheadDuck
            } else if ("RubberDuck".equals(type)) {
                // 实例化并返回RubberDuck
            } else if ("DecoyDuck".equals(type)) {
                // 实例化并返回DecoyDuck
            } else {
                throw new IllegalArgumentException("Invalid duck type");
            }
        }
    }
    
    // 客户端使用示例
    public class Client {
        public static void main(String[] args) {
            Duck mallard = new MallardDuck();
            mallard.performFly();
            mallard.performQuack();
            
            // 使用简单工厂创建鸭子
            Duck createdDuck = DuckFactory.createDuck("MallardDuck");
            createdDuck.performFly();
            createdDuck.performQuack();
        }
    }
    

    这个代码示例展示了如何根据简单工厂模式设计并实现SimUDuck问题中的鸭子类及其行为。您可以根据需要继续添加更多具体的鸭子类和行为实现类。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月9日

悬赏问题

  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图