//装饰模式 interface MonkeyKing { function change(); } class Monkey implements MonkeyKing { function change() { trace("this is a monkey"); } function say() { trace("he is talking"); } } class MonkeyChange implements MonkeyKing { private var monkey:MonkeyKing; public function Change(m:MonkeyKing) { monkey = m; } function change() { trace("begin change"); } } class Fish extends MonkeyChange { function Fish(m:MonkeyKing) { monkey = m; } function change() { monkey.change(); super.change() trace("a fish"); } function water() { trace("he can in water"); } } class Bird extends MonkeyChange { function Bird(m:MonkeyKing) { monkey = m; } function change() { monkey.change(); super.change(); trace("a bird"); } function fly() { trace("he can fly"); } } test1: var monkey:MonkeyKing = new Monkey(); trace("变鱼"); var fish:MonkeyKing = new Fish(monkey); fish.change(); trace("变鸟"); var bird:MonkeyKing = new Bird(monkey); bird.change(); trace("先变鱼,后变鸟"); var bird:MonkeyKing = new Bird(fish); bird.change(); /* 变鱼 this is a monkey begin change a fish 变鸟 this is a monkey begin change a bird 先变鱼,后变鸟 this is a monkey begin change a fish begin change a bird */ var monkey:MonkeyKing = new Monkey(); trace("变鱼后能呆在水里"); var fish:Fish = new Fish(monkey); fish.change(); fish.water() /* 变鱼后能呆在水里 this is a monkey begin change a fish he can in water test2: */