装饰者模式

发布于 2020-06-15  345 次阅读


装饰者模式动态的把职责赋予给对象,具有极强的拓展性,相比较于继承装饰者模式更具有可塑性,是继承的替代方案

应用场景:当使用继承会造成类爆炸式增长时,例:现在有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("丛林装,");
    }
}

 


路漫漫其修远兮,吾将上下而求索