模板模式

来源:互联网 发布:全国软件开发考试报名 编辑:程序博客网 时间:2024/05/22 02:08

模板模式主要是发生在继承当中,父类方法中调用了子类实现或者重写的方法,这样的好处是可以实现良好的代码架构 和 减少代码的冗余。比如在麻将游戏中 胡牌操作,就可以用模板方法,因为胡牌时 首先要判断 胡的是一个什么牌型,然后进行分数的计算,通知其他玩家胡牌 等一系列操作,首先不用模板方法来实现这个功能。

abstracl class AbstractMajiang{

abstract int judegeHutype(); // 返回胡牌类型 例如 1表示清一色 2表示十三幺 等等

public int contGrade(int hutype );//利用我们计算的胡的牌型来算分数 并且进行扣分 加分

public vod notifyHu();   //通知其他玩家 胡牌

}

class LeShanMajiang extends AbstractMajiang {

int jjudegeHutype(){.....省略具体的过程}//因为每一个麻将 各有自己不同的胡牌类型 所以要实现这个方法

void  hu(

jjudegeHutype();

contGrade(int hutype );

notifyHu(); 

)

}


class HuNanMajiang extends AbstractMajiang {

int jjudegeHutype(){.....省略具体的过程}//湖南麻将的胡牌判断

void  hu(

jjudegeHutype();

contGrade(int hutype );

notifyHu(); 

)

}


此时我们会发现每个麻将的胡牌操作逻辑都是固定的,如果每一个麻将都自己实现hu这个方法则代码的冗余很高,可维护性不是很好所以可以用模板方法,来将其写在父类当中,然后在子类实现其调用的jjudegeHutype方法。修改如下


abstracl class AbstractMajiang{

abstract int judegeHutype(); // 返回胡牌类型 例如 1表示清一色 2表示十三幺 等等

public int contGrade(int hutype );//利用我们计算的胡的牌型来算分数 并且进行扣分 加分

public vod notifyHu();   //通知其他玩家 胡牌

public void hu(){

judegeHutype();

contGrade();

notifyHu();

}

}

class LeShanMajiang extends AbstractMajiang {

int jjudegeHutype(){.....省略具体的过程}//乐山麻将的胡牌判断

}


class HuNanMajiang extends AbstractMajiang {

int jjudegeHutype(){.....省略具体的过程}//湖南麻将的胡牌判断

}

此时我们的整个代码看起来就很简洁,代码的可维护性也很好,如果以后需要在hu的时候记录相关的信息到日志当中 也只需要修改父类的方法就可以了


原创粉丝点击