装饰者模式动态的把职责赋予给对象,具有极强的拓展性,相比较于继承装饰者模式更具有可塑性,是继承的替代方案
应用场景:当使用继承会造成类爆炸式增长时,例:现在有10个游戏建模角色,20件衣服时装,20条裤子时装,10个游戏角色可以随意配,这样不同角色装的服装有20*20的可能,如果全部抽离出来会有400个类,而装饰者模式把服装的搭配动态赋予,避免了具体类的创建
装饰者的四个组成部分:抽象装饰者,具体装饰者,抽象被装饰者,具体被装饰者类
问题:现在WQL在建两个角色模型,现在有三件角色时装,玩家可以随意更换,也可以叠加穿
装饰者模式:
public class 装饰者模式1 { //玩家 public static void main(String[] args) { role a=new role1(); cplthing b=new fashionable1(a); cplthing c=new fashionable3(b); c.colthing(); } } //抽象被装饰者类 interface role{ abstract public void colthing(); } class role1 implements role{ @Override public void colthing() { System.out.print("角色1:"); } } //具体装饰者类 class role2 implements role{ @Override public void colthing() { System.out.print("角色2:"); } } abstract class cplthing implements role{ role roles; public cplthing(role roles){ this.roles=roles; } } //抽象装饰者类 class fashionable1 extends cplthing{ public fashionable1(role roles){ super(roles); } @Override public void colthing() { roles.colthing(); System.out.print("暗黑地魔装,"); } } //具体装饰者类 class fashionable2 extends cplthing{ public fashionable2(role roles){ super(roles); } @Override public void colthing() { roles.colthing(); System.out.print("天空神翼装,"); } } class fashionable3 extends cplthing{ public fashionable3(role roles){ super(roles); } @Override public void colthing() { roles.colthing(); System.out.print("丛林装,"); } }
Comments | NOTHING
Warning: Undefined variable $return_smiles in /www/wwwroot/wql_luoqin_ltd/wp-content/themes/Sakura/functions.php on line 1109