装饰者模式动态的把职责赋予给对象,具有极强的拓展性,相比较于继承装饰者模式更具有可塑性,是继承的替代方案
应用场景:当使用继承会造成类爆炸式增长时,例:现在有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