基本介绍:
装饰器模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。
示例代码:
package org.brando;
/**
*
* 类说明: 测试类
* @author Brando 2018年3月29日 下午2:03:59
*/
public class Launcher {
public static void main(String[] args) {
BaseCharacter character = new MageCharacter();
character = new DecoratorHelmet(character);
character = new DecoratorGlove(character);
character.show();
}
}
package org.brando;
/**
*
* 类说明: 基础角色.
* @author Brando 2018年5月3日 下午4:35:52
*/
public abstract class BaseCharacter {
/**
*
* 方法说明: 展示自己
* @author Brando 2018年5月3日 下午4:39:32
*/
public abstract void show();
}
package org.brando;
/**
*
* 类说明: 法师
* @author Brando 2018年5月3日 下午4:42:22
*/
public class MageCharacter extends BaseCharacter {
@Override
public void show() {
System.out.println("----裸装法师----");
}
}
package org.brando;
/**
*
* 类说明: 基础装饰器
* @author Brando 2018年5月3日 下午4:37:32
*/
public class BaseDecorator extends BaseCharacter {
private BaseCharacter baseCharacter = null;
public BaseDecorator(BaseCharacter baseCharacter) {
this.baseCharacter = baseCharacter;
}
@Override
public void show() {
baseCharacter.show();
}
}
package org.brando;
/**
*
* 类说明: 头盔装饰器
* @author Brando 2018年5月3日 下午4:37:32
*/
public class DecoratorHelmet extends BaseCharacter {
private BaseCharacter baseCharacter = null;
public DecoratorHelmet(BaseCharacter baseCharacter) {
this.baseCharacter = baseCharacter;
}
@Override
public void show() {
baseCharacter.show();
System.out.println("装备了一个头盔.");
}
}
package org.brando;
/**
*
* 类说明: 手套装饰器
* @author Brando 2018年5月3日 下午4:37:32
*/
public class DecoratorGlove extends BaseCharacter {
private BaseCharacter baseCharacter = null;
public DecoratorGlove(BaseCharacter baseCharacter) {
this.baseCharacter = baseCharacter;
}
@Override
public void show() {
baseCharacter.show();
System.out.println("装备了一个手套.");
}
}