来源:http://www.bjsxt.com/
一、【GOF23设计模式】_装饰模式、IO流底层架构、装饰和桥接模式的区别
1 package com.test.decorator; 2 /** 3 * Component抽象构件角色 4 */ 5 public interface ICar { 6 void move(); 7 } 8 9 //ConcreteComponent 具体构件角色(真实对象) 10 class Car implements ICar { 11 @Override 12 public void move() { 13 System.out.println("陆地上跑!"); 14 } 15 } 16 17 //Decorator装饰角色 18 class SuperCar implements ICar { 19 protected ICar car; 20 21 public SuperCar(ICar car) { 22 super(); 23 this.car = car; 24 } 25 26 @Override 27 public void move() { 28 car.move(); 29 } 30 } 31 32 //ConcreteDecorator具体装饰角色 33 class FlyCar extends SuperCar { 34 35 public FlyCar(ICar car) { 36 super(car); 37 } 38 39 public void fly() { 40 System.out.println("天上飞!"); 41 } 42 43 @Override 44 public void move() { 45 super.move(); 46 fly(); 47 } 48 } 49 //ConcreteDecorator具体装饰角色 50 class WaterCar extends SuperCar { 51 52 public WaterCar(ICar car) { 53 super(car); 54 } 55 56 public void swim() { 57 System.out.println("水上游!"); 58 } 59 60 @Override 61 public void move() { 62 super.move(); 63 swim(); 64 } 65 } 66 //ConcreteDecorator具体装饰角色 67 class AICar extends SuperCar { 68 69 public AICar(ICar car) { 70 super(car); 71 } 72 73 public void autoMove() { 74 System.out.println("自动跑!"); 75 } 76 77 @Override 78 public void move() { 79 super.move(); 80 autoMove(); 81 } 82 }
package com.test.decorator; public class Client { public static void main(String[] args) { Car car = new Car(); car.move(); System.out.println("增加新的功能,飞行--------------"); FlyCar flyCar = new FlyCar(car); flyCar.move(); System.out.println("增加新的功能,水上游--------------"); WaterCar waterCar = new WaterCar(car); waterCar.move(); System.out.println("增加两个新的功能:飞行,水上游----------------"); WaterCar waterCar2 = new WaterCar(new FlyCar(car)); waterCar2.move(); } }
控制台输出: 陆地上跑! 增加新的功能,飞行-------------- 陆地上跑! 天上飞! 增加新的功能,水上游-------------- 陆地上跑! 水上游! 增加两个新的功能:飞行,水上游---------------- 陆地上跑! 天上飞! 水上游!