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