Java设计模式之八(装饰模式)
2013-04-15 11:40
316 查看
一、什么是装饰模式
装饰( Decorator )模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。
二、装饰模式的结构
三、装饰模式的角色和职责
抽象组件角色: 一个抽象接口,是被装饰类和装饰类的父接口。
具体组件角色:为抽象组件的实现类。
抽象装饰角色:包含一个组件的引用,并定义了与抽象组件一致的接口。
具体装饰角色:为抽象装饰角色的实现类。负责具体的装饰。
代码实现:
抽象组件角色:
具体组件角色:
抽象装饰角色:
具体装饰角色:
测试:
结果:
装饰( Decorator )模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。
二、装饰模式的结构
三、装饰模式的角色和职责
抽象组件角色: 一个抽象接口,是被装饰类和装饰类的父接口。
具体组件角色:为抽象组件的实现类。
抽象装饰角色:包含一个组件的引用,并定义了与抽象组件一致的接口。
具体装饰角色:为抽象装饰角色的实现类。负责具体的装饰。
代码实现:
抽象组件角色:
package com.qianyan.component; public interface Car { public void run(); public void show(); }
具体组件角色:
package com.qianyan.component.concrete; import com.qianyan.component.Car; public class RunCar implements Car{ @Override public void run() { System.out.println("可以跑"); } @Override public void show() { this.run(); } }
抽象装饰角色:
package com.qianyan.decorator; import com.qianyan.component.Car; public abstract class CarDecorator implements Car{ private Car car; public CarDecorator(Car car){ this.car = car; } public abstract void show(); public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } }
具体装饰角色:
package com.qianyan.decorator.impl; import com.qianyan.component.Car; import com.qianyan.decorator.CarDecorator; public class FlyDecorator extends CarDecorator{ public FlyDecorator(Car car) { super(car); } @Override public void show() { this.getCar().show(); this.fly(); } public void fly() { System.out.println("可以飞"); } @Override public void run() { } }
package com.qianyan.decorator.impl; import com.qianyan.component.Car; import com.qianyan.decorator.CarDecorator; public class SwimDecorator extends CarDecorator{ public SwimDecorator(Car car) { super(car); } @Override public void show() { this.getCar().show(); this.swim(); } public void swim() { System.out.println("可以游"); } @Override public void run() { // TODO Auto-generated method stub } }
测试:
package com.qianyan.customer; import com.qianyan.component.Car; import com.qianyan.component.concrete.RunCar; import com.qianyan.decorator.impl.FlyDecorator; import com.qianyan.decorator.impl.SwimDecorator; public class User { public static void main(String[] args) { Car car = new RunCar(); car.show(); System.out.println("------"); Car flyCar = new FlyDecorator(car); flyCar.show(); System.out.println("------"); Car flySwimCar = new SwimDecorator(flyCar); flySwimCar.show(); } }
结果:
可以跑 ------ 可以跑 可以飞 ------ 可以跑 可以飞 可以游
相关文章推荐
- Java设计模式之装饰模式原理与用法实例详解
- java 策略设计模式 装饰器模式
- Java设计模式(三)装饰模式详解
- 菜鸟版JAVA设计模式—适配器模式,装饰模式,代理模式异同
- JAVA设计模式(七)——装饰模式
- 【Java设计模式】之装饰模式
- Java 装饰设计模式
- Java 装饰设计模式
- 菜鸟版JAVA设计模式—适配器模式,装饰模式,代理模式异同
- Java设计模式之装饰模式
- Java设计模式十九:装饰模式(Decorator Pattern)
- (三)Java设计模式--装饰器模式
- Java设计模式--------装饰器,桥接和适配器模式的异同
- java IO 字节流、字节流读写文件、字节流缓冲区、文件拷贝、装饰设计模式
- JAVA设计模式之装饰模式
- Java基础之IO流,装饰设计模式的应用之行号、缓冲读取文本文件
- java笔记 装饰设计模式
- java io 装饰设计模式
- 黑马程序员-Java IO和装饰设计模式
- java23种设计模式之装饰模式(Decorator)