码迷,mamicode.com
首页 > 编程语言 > 详细

java-设计模式(结构型)-【装饰模式】

时间:2015-04-08 12:23:04      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

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();
	}
}

  运行结果:

奥迪车的颜色:白色
蓝色装饰厂对奥迪车喷蓝色油漆::蓝色
红色装饰厂对奥迪车喷红色油漆::红色

  

  

java-设计模式(结构型)-【装饰模式】

标签:

原文地址:http://www.cnblogs.com/beyondbycyx/p/4401747.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!