标签:
1.图解

2.使用场景
当对子类进行装饰时或子类需要过多的装饰时,可以将抽象父类分出一个抽象装饰类,
由抽象装饰类的子类对子类进行装饰。比如给汽车喷涂油漆时。
(http://itlab.idcquan.com/Java/special/patterns/Index.html)
3.代码实现
新建一个抽象汽车父类:
//抽象父类汽车
public abstract class Car {
/*
* 抽象父类汽车的基本信息:
* 生产地址,颜色,速度。
* 汽车名由子类名决定,无需定义
* */
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public float getSpeed() {
return speed;
}
public void setSpeed(float speed) {
this.speed = speed;
}
private String Color;
public String getColor() {
return Color;
}
public void setColor(String color) {
Color = color;
}
private String address;
private float speed;
public abstract void printColor();
}
然后新建一个奥迪汽车子类:
public class Audi extends Car {
/*
* 汽车子类奥迪
* 在构造奥迪汽车时就配置相关的信息
* */
public Audi()
{
super.setColor("白色");
}
@Override
public void printColor() {
// TODO Auto-generated method stub
System.out.println("奥迪车的颜色:"+super.getColor());
}
}
然后再新建一个装饰者父类:
public abstract class Decorate_Car extends Car {
/*
* 抽象装饰父类的两个操作:
* 1.汽车入厂[setCar方法]
* 2.获取入厂汽车的信息[c.printColor()方法]
* */
protected Car c=null;
//装车入厂
public void setCar(Car c){
this.c=c;
}
//获取入厂车的信息
@Override
public void printColor() {
//得知入厂车的颜色
c.printColor();
}
}
然后再新建装饰者子类:红色装饰者类:
public class Decorate_Red_Car extends Decorate_Car{
/*
* 对汽车进行相应的装饰
* */
@Override
public void printColor() {
// TODO Auto-generated method stub
super.printColor();
this.c.setColor(":红色");
System.out.println("红色装饰厂对奥迪车喷红色油漆:"+this.c.getColor());
}
}
然后再新建装饰者子类:蓝色装饰者类:
public class Decorate_Blue_Car extends Decorate_Car{
/*
* 对汽车进行相应的装饰
* */
@Override
public void printColor() {
// TODO Auto-generated method stub
super.printColor();
this.c.setColor(":蓝色");
System.out.println("蓝色装饰厂对奥迪车喷蓝色油漆:"+this.c.getColor());
}
}
测试:
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Audi audi=new Audi();
Decorate_Blue_Car b_car=new Decorate_Blue_Car();
Decorate_Red_Car r_car=new Decorate_Red_Car();
//将奥迪车入厂
b_car.setCar(audi);
//将装饰奥迪的蓝色装饰子类入厂
r_car.setCar(b_car);
//打印颜色
r_car.printColor();
}
}
运行结果:
奥迪车的颜色:白色 蓝色装饰厂对奥迪车喷蓝色油漆::蓝色 红色装饰厂对奥迪车喷红色油漆::红色
标签:
原文地址:http://www.cnblogs.com/beyondbycyx/p/4401747.html