标签:
通过另一个对象来扩展自己的行为,在不破坏类的封装的情况下,实现松耦合,易扩展的效果。
1.当我们需要为某个现有的对象,动态的增加一个新的功能或职责时,可以考虑使用装饰模式。
2.当某个对象的职责经常发生变化或者经常需要动态的增加职责,避免为了适应这样的变化,而增加继承子类扩展的方式,因为这种方式会造成子类膨胀的速度过快,难以控制。
3. 不用修改给定对象的结构就可以在外部增加附加的功能。
package com.soyoungboy.example2; public interface Car { public void show(); public void run(); }
public class RunCar implements Car { public void run() { System.out.println("可以跑"); } public void show() { this.run(); } }
public abstract class CarDecorator implements Car{ private Car car; public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } public CarDecorator(Car car) { this.car = car; } public abstract void show(); }
public class FlyCarDecorator extends CarDecorator{ public FlyCarDecorator(Car car) { super(car); } public void show() { this.getCar().show(); this.fly(); } public void fly() { System.out.println("可以飞"); } public void run() { } }
public class SwimCarDecorator extends CarDecorator { public SwimCarDecorator(Car car) { super(car); } public void show() { this.getCar().show(); this.swim(); } public void swim() { System.out.println("可以游"); } public void run() { } }
public class MainClass { public static void main(String[] args) { //普通的車,只能跑 Car car = new RunCar(); car.show(); System.out.println("---------"); //給車添加新功能,既能跑,也能游泳 Car swimcar = new SwimCarDecorator(car); swimcar.show(); System.out.println("---------"); //給車添加新功能,既能跑,也能游泳,還能飛 Car flySwimCar = new FlyCarDecorator(swimcar); flySwimCar.show(); } }
例如 BufferedInputStream bis = new BufferedInputStream(new FileInputStream());
标签:
原文地址:http://www.cnblogs.com/androidsuperman/p/4852842.html