设计模式--装饰者设计模式(Decorator)
2015-10-02 22:40
441 查看
装饰者模式又叫包装模式。通过另一个对象来扩展自己的行为,在不破坏类的封装的情况下,实现松耦合,易扩展的效果。抽象组件角色: 一个抽象接口,是被装饰类和装饰类的父接口可以给这些对象动态地添加职责。具体组件角色:为抽象组件的实现类,是定义了一个具体的对象,也可以给这个对象添加一些职责。抽象装饰角色:包含一个组件的引用,并定义了与抽象组件一致的接口,继承了Component,从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator存在的。具体装饰角色:为抽象装饰角色的实现类,负责具体的装饰。起到给Component添加职责的功能。
装饰者模式的使用场景:
1.当我们需要为某个现有的对象,动态的增加一个新的功能或职责时,可以考虑使用装饰模式。 2.当某个对象的职责经常发生变化或者经常需要动态的增加职责,避免为了适应这样的变化,而增加继承子类扩展的方式,因为这种方式会造成子类膨胀的速度过快,难以控制。
3. 不用修改给定对象的结构就可以在外部增加附加的功能。
装饰者设计模式特点:
装饰是构造函数参数传递进行增强;装饰模式比继承要灵活。避免了继承体系臃肿。而且降低了类于类之间的关系。装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。抽象组件角色Car.java 包含汽车的基本功能的抽象方法 run():package com.soyoungboy.example2; public interface Car { public void show(); public void run(); }具体组件角色RunCar.java 实现run():
public class RunCar implements Car { public void run() { System.out.println("可以跑"); } public void show() { this.run(); } }抽象装饰角色CarDecorator.java ,实现Car接口,提供传进来Car对象的构造方法和获取Car的getCar方法:
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(); }具体装饰角色1 FlyCarDecorator.java,继承自CarDecorator,具体实现车会飞的功能,传进来的car来进行功能扩展的:
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() { } }具体装饰角色2 SwimCarDecorator.java 继承自CarDecorator,具体实现车会游泳的功能:
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(); } }结果:可以跑---------可以跑可以游---------可以跑可以游可以飞
装饰者设计模式在实际开发中的使用:
java IO流中使用:例如 BufferedInputStream bis = new BufferedInputStream(new FileInputStream());android json数据解析的时候使用: http://m.oschina.net/blog/408460
相关文章推荐
- 简单的Singleton模式的实现
- ocp-57
- Linux下paste命令详解
- ubuntu怎样打开命令行终端(5种方法)
- 软件光栅化渲染器Augustus计划
- ocp-56
- ocp-55
- 一张图诠释Java集合
- python requests库官方手册
- hdu 5493 Queue(线段树)
- golang的采集库
- 几个java的图片方法
- 十七、MDT 2013 Update 1批量部署-如何在部署系统使用离线系统补丁
- ocp-54
- 在Linux CentOS 6.6上安装Python 2.7.9
- 删除没有任何员工的部门信息
- Linux nc (netcat) 详解
- 练习
- Maven实战一
- ocp-53