书城计算机网络大话设计模式
8183300000156

第156章 8 模板方法模式与对象的封装性

小A:“又应该怎样去理解模板方法模式与对象的封装性?”

大B:“面向对象的三大特点:继承,封装,多态。对象有内部状态和外部的行为。封装是为了信息隐藏,通过封装来维护对象内部数据的完整性。使得外部对象不能够直接访问一个对象的内部状态,而必须通过恰当的方法才能访问。在java语言中,采用给对象属性和方法赋予指定的修改符(public,protected,private)来达到封装的目的,使得数据不被外部对象恶意的访问及方法不被错误调用从而破坏对象的封装性。降低方法的访问级别,也就是最大化的降低方法的可见度是一种很重要的封装手段。最大化降低方法的可见度除了可以达到信息隐藏外,还能有效的降低类之间的耦合度,降低一个类的复杂度。还可以减少开发人员发生的的错误调用。一个类应该只公开外部需要调用的方法。而所有为公开方法服务的方法都应该声明为protected或private。如是一个方法不是需要对外公开的方法,但是它需要被子类进行扩展或调用。那么把它定义为protected。否则应该为private。显而易见,模板方法模式中的声明为abstract的基本操作都是需要迫使子类去实现的,它们仅仅是为模板方法placeOrder服务的。它们不应该被AbstractOrder所公开,所以它们应该protected。”

代码:

protected abstract int getOrderItemPrice(OrderItem orderItem);

protected abstract int getSpendingLimit(int customerId);

protected abstract int saveOrder(int customerId,int total,List orderItemList);

rendercode();

模板方法模式中,基本方法应该声明为protcted abstract。