java设计模式之三:模版模式
4001 点击·0 回帖
![]() | ![]() | |
![]() | 新的一天,天气不错,坚持、努力、加油! 今天想说的是模版模式,其实这个模式大家都常用,只是可能不知道还有“模版模式”这么一个称呼而已,使用继承的方式来实现,父类为模版,子类根据不同的特点来继承和修改。魔兽世界里每个职业都有三个天赋,比如法师就有火法、奥法、冰法,不管你是什么法师,你都有一些法师的基础技能,比如传送门和造食术等,但是当你选择了不同的天赋,就会拥有新的且必须是该天赋才拥有的特殊的技能。比如奥法的减速,冰法的深度冻结,火法的龙息术等。这里法师是基类,冰法、火法和奥法是子类,就是一种模版模式的实现。 这里,有一个法师基类,会造食术和开传送门,还分别有三个子类:火法,奥法和冰法 [java] package plate; public class Mage { /** * DOC 法师都会造食术 */ public void cook() { System.out.println("I am cooking..."); } /** * DOC 法师都会开传送门,30G一次,你懂的. */ public void goAnyWhere() { System.out.println("going some where"); } } package plate; public class Mage { /** * DOC 法师都会造食术 */ public void cook() { System.out.println("I am cooking..."); } /** * DOC 法师都会开传送门,30G一次,你懂的. */ public void goAnyWhere() { System.out.println("going some where"); } } [java] package plate; public class IceMage extends Mage { /** * DOC 冰法会深度冻结. */ public void deepFreeze() { System.out.println("I will freeze you!"); } } package plate; public class IceMage extends Mage { /** * DOC 冰法会深度冻结. */ public void deepFreeze() { System.out.println("I will freeze you!"); } } [java] package plate; public class FireMage extends Mage { /** * DOC 火法会龙息术. */ public void dragonBreathe() { System.out.println("I will burn you!"); } } package plate; public class FireMage extends Mage { /** * DOC 火法会龙息术. */ public void dragonBreathe() { System.out.println("I will burn you!"); } } [java] package plate; public class ArcaneMage extends Mage { /** * DOC 奥法会减速技能. */ public void slowDown() { System.out.println("I will let you slow down!"); } } package plate; public class ArcaneMage extends Mage { /** * DOC 奥法会减速技能. */ public void slowDown() { System.out.println("I will let you slow down!"); } } 测试类: [java] package test; import plate.ArcaneMage; import plate.FireMage; import plate.IceMage; public class PlateTest { public static void main(String[] args) { FireMage fireMage = new FireMage(); IceMage iceMage = new IceMage(); ArcaneMage arcaneMage = new ArcaneMage(); System.out.println("-------------火法-----------"); fireMage.cook(); fireMage.dragonBreathe(); System.out.println("-------------冰法-----------"); iceMage.goAnyWhere(); iceMage.deepFreeze(); System.out.println("-------------奥法-----------"); arcaneMage.cook(); arcaneMage.slowDown(); } } package test; import plate.ArcaneMage; import plate.FireMage; import plate.IceMage; public class PlateTest { public static void main(String[] args) { FireMage fireMage = new FireMage(); IceMage iceMage = new IceMage(); ArcaneMage arcaneMage = new ArcaneMage(); System.out.println("-------------火法-----------"); fireMage.cook(); fireMage.dragonBreathe(); System.out.println("-------------冰法-----------"); iceMage.goAnyWhere(); iceMage.deepFreeze(); System.out.println("-------------奥法-----------"); arcaneMage.cook(); arcaneMage.slowDown(); } } 测试结果: -------------火法----------- I am cooking... I will burn you! -------------冰法----------- going some where I will freeze you! -------------奥法----------- I am cooking... I will let you slow down! | |
![]() | ![]() |