代码: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