2201_75340854 2024-03-09 16:00 采纳率: 30.4%
浏览 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日