装饰模式(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
装饰模式Demo:
/**
* 2018年3月25日下午6:56:23
*/
package com.Designpattern;
/**
* @author xinwenfeng
*
*/
public class TestDecorator {
/**
* @param args
*/
public static void main(String[] args) {
Acar mycar = new Acar();
Engine engine = new Engine();
Tyre tyre = new Tyre();
Transmission transmission = new Transmission();
engine.setCar(mycar);//用发动机装饰
tyre.setCar(engine);//用车轮装饰
transmission.setCar(tyre);//用变速器装饰
transmission.create();
engine.setEngine("V8发动机");
tyre.setTyre("五辐式越野轮胎");
transmission.setTransmission("7速手动");
transmission.create();
engine.setEngine("单缸发动机");
tyre.setTyre("手扶拖拉机轮胎");
transmission.setTransmission("工字变速箱");
transmission.create();
}
}
abstract class Car{
public abstract void create();
}
class Acar extends Car{
@Override
public void create() {
System.out.println("创建一辆普通的车。");
}
}
abstract class Decorator extends Car{
Car car = null;
protected void setCar(Car car) {
this.car = car;
}
@Override
public void create() {
if(null != car) {
car.create();
}
}
}
class Engine extends Decorator{
String s = null;
public void setEngine(String s) {
this.s = s;
}
@Override
public void create() {
super.create();
if(null != s) {
System.out.println("装载了发送机:"+s);
}else {
System.out.println("没有装载发动机。");
}
}
}
class Tyre extends Decorator{
String s = null;
public void setTyre(String s) {
this.s = s;
}
@Override
public void create() {
super.create();
if(s != null) {
System.out.println("装载了轮胎:"+s);
}else {
System.out.println("没有装载轮胎。");
}
}
}
class Transmission extends Decorator{
String s = null;
public void setTransmission(String s) {
this.s = s;
}
@Override
public void create() {
super.create();
if(s != null) {
System.out.println("装载了变速器:"+s);
}else {
System.out.println("没有装载变速器。");
}
}
}
结果: