首页 > 程序开发 > 软件开发 > Java >

java设计模式之三:模版模式

2012-05-11

新的一天,天气不错,坚持、努力、加油!今天想说的是模版模式,其实这个模式大家都常用,只是可能不知道还有模版模式这么一个称呼而已,使用继承的方式来实现,父类为模版,子类根据不同的特点来继承和修改。魔...

新的一天,天气不错,坚持、努力、加油!

今天想说的是模版模式,其实这个模式大家都常用,只是可能不知道还有“模版模式”这么一个称呼而已,使用继承的方式来实现,父类为模版,子类根据不同的特点来继承和修改。魔兽世界里每个职业都有三个天赋,比如法师就有火法、奥法、冰法,不管你是什么法师,你都有一些法师的基础技能,比如传送门和造食术等,但是当你选择了不同的天赋,就会拥有新的且必须是该天赋才拥有的特殊的技能。比如奥法的减速,冰法的深度冻结,火法的龙息术等。这里法师是基类,冰法、火法和奥法是子类,就是一种模版模式的实现。

这里,有一个法师基类,会造食术和开传送门,还分别有三个子类:火法,奥法和冰法


[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!

摘自 a107494639的专栏

相关文章
最新文章
热点推荐