您的位置:首页 > 编程语言 > Java开发

java设计模式之装饰模式

2016-04-27 22:36 417 查看
装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案

     其实这里可以理解为,我不想在原始类上做修改,但是我又想在原始功能上增加一些功能

组件抽象类:

package com.asiainfo.decorator;

/**
* 抽象组件
* @author Administrator
*
*/
public interface ICar {
public void run();

}
组件实现类

package com.asiainfo.decorator;
/**
* 具体实现组件
* @author Administrator
*
*/
public class Car implements ICar{

public void run() {

System.out.println("陆上跑");

}

}
装饰角色
package com.asiainfo.decorator;

/**
* 装饰角色
* @author Administrator
*
*/
public class Decorator implements ICar{

private ICar car;

public Decorator(ICar car){
this.car=car;
}

public void run() {
// 委派给构件
car.run();
}
}
具体装饰对象
package com.asiainfo.decorator;

public class FlyCar extends Decorator{

public FlyCar(ICar car) {
super(car);
}

//扩展功能
public void fly(){
System.out.println("天上飞");
}

public void run() {
fly();
super.run();
}
}

package com.asiainfo.decorator;

public class WaterCar extends Decorator {

public WaterCar(ICar car) {
super(car);
}
//扩展功能
public void swin() {System.out.println("水里游");}public void run() { swin(); super.run();}}



测试:

package com.asiainfo.test;
import com.asiainfo.decorator.Car;
import com.asiainfo.decorator.FlyCar;
import com.asiainfo.decorator.WaterCar;

public class TestDecorator
public static void main(String[] args) {
//定义实体对象
Car car= new Car();
//装饰对象
FlyCar fly =  new FlyCar(car);
fly.run();

WaterCar water = new WaterCar(car);
water.run();

//实现两种装饰
System.out.println("=================");
WaterCar water1 = new WaterCar(new FlyCar(car));
water1.run();
}
}
结果:

天上飞
陆上跑
水里游
陆上跑
=================
水里游
天上飞
陆上跑


其实我们IO流 也是装饰模式

   BufferedReader(new InputStreamReader(new FileInputStream(new File("d://123.txt"))))

  new File("d://123.txt"):源实体类

  new FileInputStream()  :  装饰类

  new InputStreamReader:适配器

其实我们IO流也用到了适配器模式  就如InputStreamReader  OutputStreamWriter

 


   


        

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java设计模式