1、什么是装饰模式测试
装饰( Decorator )模式又叫作包装模式。通 过一种对客户端透明的方式来扩展对象的功能, 是继承关系的一个替换方案。this
2、装饰模式的结构spa
3、装饰模式的角色和职责code
抽象组件角色: 一个抽象接口,是被装饰类和 装饰类的父接口。对象
具体组件角色:为抽象组件的实现类。blog
抽象装饰角色:包含一个组件的引用,并定义了 与抽象组件一致的接口。继承
具体装饰角色:为抽象装饰角色的实现类。负责 具体的装饰。接口
没装饰前get
车接口class
1 //车接口 2 public interface Car { 3 4 public void show(); 5 6 public void run(); 7 }
能够跑的车
1 //能够跑的车 2 public class RunCar implements Car { 3 4 public void run() { 5 System.out.println("能够跑"); 6 } 7 8 public void show() { 9 this.run(); 10 } 11 }
会飞的车
1 //会飞的车 2 public class FlyCar implements Car { 3 4 public void show() { 5 this.run(); 6 this.fly(); 7 } 8 9 public void run() { 10 System.out.println("能够跑"); 11 } 12 13 public void fly() { 14 System.out.println("能够飞"); 15 } 16 }
游泳的车
1 //游泳的车 2 public class SwimCar implements Car{ 3 4 public void run() { 5 System.out.println("能够跑"); 6 } 7 8 public void Swim() { 9 System.out.println("能够游"); 10 } 11 12 public void show() { 13 this.run(); 14 this.Swim(); 15 } 16 }
测试
1 public class MainClass { 2 public static void main(String[] args) { 3 Car flycar = new SwimCar(); 4 flycar.show(); 5 } 6 }
===========================================================================
车接口
1 public interface Car { 2 3 public void show(); 4 5 public void run(); 6 }
能够跑的车
1 //能够跑的车 2 public class RunCar implements Car { 3 4 public void run() { 5 System.out.println("能够跑"); 6 } 7 8 public void show() { 9 this.run(); 10 } 11 }
车装饰
1 //汽车装饰 2 public abstract class CarDecorator implements Car{ 3 private Car car; 4 5 public Car getCar() { 6 return car; 7 } 8 9 public void setCar(Car car) { 10 this.car = car; 11 } 12 13 public CarDecorator(Car car) { 14 this.car = car; 15 } 16 17 public abstract void show(); 18 }
游泳车装饰
1 //游泳车装饰 2 public class SwimCarDecorator extends CarDecorator { 3 4 public SwimCarDecorator(Car car) { 5 super(car); 6 } 7 8 public void show() { 9 this.getCar().show(); 10 this.swim(); 11 } 12 13 public void swim() { 14 System.out.println("能够游"); 15 } 16 17 public void run() { 18 19 } 20 }
飞车装饰
1 //飞车装饰 2 public class FlyCarDecorator extends CarDecorator{ 3 4 public FlyCarDecorator(Car car) { 5 super(car); 6 } 7 8 public void show() { 9 this.getCar().show(); 10 this.fly(); 11 } 12 13 public void fly() { 14 System.out.println("能够飞"); 15 } 16 17 public void run() { 18 19 } 20 }
测试
1 public class MainClass { 2 public static void main(String[] args) { 3 Car car = new RunCar(); 4 5 car.show(); 6 System.out.println("---------"); 7 8 Car swimcar = new SwimCarDecorator(car); 9 swimcar.show(); 10 System.out.println("---------"); 11 12 Car flySwimCar = new FlyCarDecorator(swimcar); 13 flySwimCar.show(); 14 } 15 }