基本介绍:
装饰器模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。
示例代码:
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("装备了一个手套."); } }