大话设计模式
字体: 16 + -

第151章

小a:“师兄,能给我讲讲模板方法模式的结构吗?”

大b:“在模板方法模式中有两个参与者进行协作。”

小a:“哪两种参与者?”

大b:“抽象模板类和具体类。”

小a:“什么是抽象模板类?”

大b:“定义一个或多个抽象操作,由子类去实现。这些操作称为基本操作。定义并实现一个具体操作,这个具体操作通过调用基本操作给确定顶级逻辑。这个具体操作称为模板方法。”

小a:“什么是具体类啊?”

大b:“实现抽象模板类所定义的抽象操作。如上面的订单处理所示:abstractorder就是抽象模板类,placeorder即是抽象模板方法。getorderitemprice,getspendinglimit和saveorder三个抽象方法为基本操作。具体子类能按需要去实现这三个抽象方法。不同的子类可能有着不同的实现方式。”

代码:

publicclassconcreteorderextendsabstractorder{

publicintgetorderitemprice(orderitemorderitem){

//计算货物的售价

……

}

publicintgetspendinglimit(intcustomerid){

//读取客户的信用额度

……

}

publicintsaveorder(intcustomerid,inttotal,listorderitemlist){

//写入数据库

……

}

}

大b:“rendercode();concreteorder为abstractorder的具体子类,concreteorder需要去完成具体的三个基本操作。同时它也具有了父类一样的处理逻辑。把具体的实现延迟到了子类去实现,这就是模板方法模式所带来的好处。”