從王者榮耀看設計模式(七 裝飾者模式)

2022-06-10 12:06:10 字數 2981 閱讀 5711

一.簡介

王者榮耀中,角色的"傷害值"和"生命值"是很重要的概念。為了保證遊戲的勝利,玩家會通過在遊戲開始前配置合適的遊戲銘文,在遊戲中積累經濟購買裝備的方式來提公升英雄角色的傷害值和生命值。

二.裝飾者模式

裝飾者模式(decorator pattern)是一種比較常見的模式,裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案

模式動機

在現實生活中,在不改變乙個物件本身的基礎上給物件增加額外的新行為的情況比比皆是。在本例項中,給英雄裝飾各類裝備可以增加英雄的生命值和攻擊力。

裝飾者(decorator)和被裝飾(擴充套件)的物件有著相同的超類(supertype)

我們可以用多個裝飾者去裝飾乙個物件。

我們可以用裝飾過的物件替換**中的原物件,而不會出問題(因為他們有相同的超類)。

裝飾者可以在委託(delegate,即呼叫被裝飾的類的成員完成一些工作)被裝飾者的行為完成之前或之後加上他自己的行為。

乙個物件能在任何時候被裝飾,甚至是執行時。

三.結構圖

四.設計類圖

五.**實現

hero(component抽象構件類)

package com.practice.domain;

/* *component抽象構件類

*@param herohurt 英雄傷害值

*@parem herolife 英雄生命值

*/public abstract class hero

public abstract double herohurt();

public abstract double herolife();

}

houyi(concretecomponent具體構件)

package com.practice.domain;

public class houyi extends hero

public double herohurt()

public double herolife()

}

decorate類(decorator裝飾角色)

package com.practice.decorator;

import com.practice.domain.hero;

/* *decorate類( decorator裝飾角色)

*/public abstract class decorator extends hero

fengbao類(銘文:風暴——具體類的裝飾類)

package com.practice.device;

import com.practice.decorator.decorator;

import com.practice.domain.hero;

/* * fengbao類(銘文:風暴——具體類的裝飾類)

* 增加傷害值

*/public class fengbao extends decorator

public string getdescription()

public double herohurt()

public double herolife()

}

pojun類(裝備:破軍——decorator裝飾角色)

package com.practice.device;

import com.practice.decorator.decorator;

import com.practice.domain.hero;

/* * pojun類(裝飾角色)

* 增加英雄傷害值

*/public class pojun extends decorator

public string getdescription()

public double herohurt()

public double herolife()

}

bazhezhongzhuang(裝備:霸者重灌——decorator裝飾角色)

package com.practice.device;

import com.practice.decorator.decorator;

import com.practice.domain.hero;

/* * bazhezhongzhuang類

* 增加英雄生命值

*/public class bazhezhongzhuang extends decorator

public string getdescription()

public double herohurt()

public double herolife()

}

test(測試類)

package com.practice.test;

import com.practice.device.bazhezhongzhuang;

import com.practice.device.fengbao;

import com.practice.device.pojun;

import com.practice.domain.hero;

import com.practice.domain.houyi;

/* * 測試類

*/public class test

}

六.執行結果:

從王者榮耀看設計模式(裝飾者模式)

從王者榮耀看設計模式(七 裝飾者模式)

從王者榮耀看設計模式 裝飾者模式 一.簡介 王者榮耀中,角色的 傷害值 和 生命值 是很重要的概念。為了保證遊戲的勝利,玩家會通過在遊戲開始前配置合適的遊戲銘文,在遊戲中積累經濟購買裝備的方式來提公升英雄角色的傷害值和生命值。二.裝飾者模式 裝飾者模式 decorator pattern 是一種比較...

從王者榮耀看設計模式(三 模板方法模式)

一 簡介 二 模板方法模式 定義乙個操作中的演算法的骨架,而將步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重定義演算法的某些特定步驟。在模板方法模式中,我們需要準備乙個抽象類,將部分邏輯以具體方法以及建構函式的形式實現,然後宣告一些抽象方法來讓子類實現剩餘的邏輯。不同的子類可以以...

Java設計模式 裝飾者模

裝飾者模式,其實不難理解,簡單地說就是裝飾者和被裝飾者擁有共同的超類,裝飾者只是豐富了行為,拓展了功能,而型別是不變的。說起來可能比較抽象,接下來通過乙個簡單的例子來實現乙個裝飾者模式。動態的給乙個物件新增一些額外的職責或者功能,就增加功能來說,裝飾者模式相比生成子類更為靈活。大多數情況下被裝飾者不...