鸭子与设计模式的故事(多种设计模式配合使用案例)

代码:https://download.csdn.net/download/u010191034/85242829

uml图

介绍

1 Quackable 是鸭子叫的接口,有四种实现

2 GooseAdapter是适配器,可以将鹅叫适配到Quackable 上从而达到统一处理的目的

3 Flock组合模式 可以管理一堆鸭子

4 装饰者QuackCounter用于装饰鸭子,为鸭子添加扩展计数功能

5 工厂 生产鸭子,生产两套,一个套没有装饰的,一套有装饰的

6 观察者比较复杂,所有的都要实现观察者接口才可以,可以放入多个通知这来完成对不同对象的通知


public class DuckSimulator {
    public static void main(String[] args) {
        DuckSimulator simulator = new DuckSimulator();
        AbstractDuckFactory duckFactory = new CountingDuckFactory();

        simulator.simulate(duckFactory);
    }
    void simulate(AbstractDuckFactory duckFactory){

        Quackable mallardDuck =duckFactory.createMallardDuck();
        Quackable redheadDuck =duckFactory.createRedheadDuck();
        Quackable duckCall =duckFactory.createDuckCall();
        Quackable rubberDuck = duckFactory.createRubberDuck();
        Quackable gooseDuck = new GooseAdapter(new Goose());

        Flock flockOfDucks = new Flock();
        flockOfDucks.add(mallardDuck);
        flockOfDucks.add(redheadDuck);
        flockOfDucks.add(duckCall);
        flockOfDucks.add(rubberDuck);
        flockOfDucks.add(gooseDuck);


        Quackable mallardDuckOne =duckFactory.createMallardDuck();
        Quackable mallardDuckTwo =duckFactory.createMallardDuck();
        Quackable mallardDuckThree =duckFactory.createMallardDuck();
        Quackable mallardDuckFour =duckFactory.createMallardDuck();

        Flock flockOfMallards = new Flock();
        flockOfMallards.add(mallardDuckOne);
        flockOfMallards.add(mallardDuckTwo);
        flockOfMallards.add(mallardDuckThree);
        flockOfMallards.add(mallardDuckFour);

        flockOfMallards.add(flockOfDucks);

        //设置群的观察者
        Quackologist quackologist = new Quackologist();
        flockOfMallards.registerObserver(quackologist);


        System.out.println("整个鸭子群");
        simulater(flockOfMallards);
        System.out.println("绿头鸭群");
        simulater(flockOfDucks);

        System.out.println("鸭叫个数"+ QuackCounter.getQuacks());


    }
    void simulater(Quackable duck){
        duck.quack();
    }
}

——————chenchen

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值