车类型:
package decorator_mode; /** * 车类型 * 装饰器中为: 抽象构建角色 */ public interface ICar { /** * 移动 */ void move(); }
车实现类:
package decorator_mode; /** * 车实现类 * 装饰器中为: 具体构建角色, 也叫真实对象或被装饰对象 * 也可以对此类进行扩展, 与装饰器行为互不影响 */ public class Car implements ICar { /** * 移动 */ @Override public void move() { System.out.println("陆地上跑!"); } }
装饰器基类:
package decorator_mode; /** * 装饰器(包装器)基类 * 同时实现ICar, 是为获得共同的行为, 此处就是移动(move) */ public class SuperCar implements ICar { /** * 持有对真实car的引用 * 子类使用到它, 必须声明protected */ protected ICar car; /** * 构造器(传入真实car) */ public SuperCar(ICar car) { this.car = car; } /** * 移动 */ @Override public void move() { car.move(); } }
飞行装饰器类:
package decorator_mode; /** * 飞行装饰器类 * 装饰器中为: 具体装饰角色 */ public class FlySuperCar extends SuperCar { /** * 初始化父类, 使之持有对真实car的引用 */ public FlySuperCar(ICar car) { super(car); } /** * 移动(同时能飞行) */ @Override public void move() { super.move(); fly(); } /* * 飞行 */ private void fly(){ System.out.println("天上飞!"); } }
水上游装饰器类:
package decorator_mode; /** * 水上游装饰器类 * 装饰器中为: 具体装饰角色 */ public class WaterSuperCar extends SuperCar { /** * 初始化父类, 使之持有对真实car的引用 */ public WaterSuperCar(ICar car) { super(car); } /** * 移动(同时能水上游) */ @Override public void move() { super.move(); swim(); } /* * 水上游 */ private void swim(){ System.out.println("水上游!"); } }
自动跑装饰器类:
package decorator_mode; /** * 自动跑装饰器类 * 装饰器中为: 具体装饰角色 */ public class AISuperCar extends SuperCar { /** * 初始化父类, 使之持有对真实car的引用 */ public AISuperCar(ICar car) { super(car); } /** * 移动(同时能自动跑) */ @Override public void move() { super.move(); autoMove(); } /* * 自动跑 */ private void autoMove(){ System.out.println("自动跑!"); } }
测试类:
package decorator_mode; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; public class Client { public static void main(String[] args) throws IOException { Car car = new Car(); car.move();//真实car, 真实角色 System.out.println("增加新的功能: 飞行-----------------"); FlySuperCar flySuperCar = new FlySuperCar(car); flySuperCar.move(); System.out.println("增加新的功能: 水里游-----------------"); WaterSuperCar waterSuperCar = new WaterSuperCar(car); waterSuperCar.move(); System.out.println("增加两个新的功能: 飞行, 水里游-----------------"); WaterSuperCar waterSuperCar2 = new WaterSuperCar(new FlySuperCar(car));//可以陆地上跑!天上飞!水上游! waterSuperCar2.move(); //Reader r = new BufferedReader(new InputStreamReader(new FileInputStream(new File("d:/a.txt")))); //FileInputStream 是真实的对象, 拥有文件输入流功能 //InputStreamReader 和 BufferedReader 是具体装饰器, 拥有文件输入流功能(同时有读输入流和读并缓存) } }
执行结果:
陆地上跑! 增加新的功能: 飞行----------------- 陆地上跑! 天上飞! 增加新的功能: 水里游----------------- 陆地上跑! 水上游! 增加两个新的功能: 飞行, 水里游----------------- 陆地上跑! 天上飞! 水上游!
谢谢声明出处!
转自: http://www.cnblogs.com/gscq073240/articles/7112720.html

浙公网安备 33010602011771号