灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3354回复:0

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

楼主#
更多 发布于:2012-09-08 09:42

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


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


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







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




喜欢0 评分0
游客

返回顶部