第158章
intorderId=(customerId,total,orderItemList);
returnnewOrderImpl(orderId,total);
rendercode;
大B:“模板方法模式与策略模式的作用相常类似。有时可以用策略模式替代模板方法模式。模板方法模式通过继承来实现代码复用,策略模式使用委托,委托比继承具有更大的灵活性。继承经常 被错误的使用。策略模式把不确定的行为集中到一个接口中,并在主类委托这个接口。”
思考刚才的订单处理例子,改为策略模式后。
1、把不确定的行为抽取为一个接口。
代码:
PublicinterfaceOrderHelper{
for(inti=0;(customerId)){
thrownewBusinessException(“超出信用额度”+(customerId));
publicvoidsetOrderHelper(OrderHelperorderHelper){
小A:“模板方法模式与策略模式有什么不同?”
publicintgetOrderItemPrice(OrderItemorderItem);
publicintgetSpendingLimit(intcustomerId);
代码:
=orderHelper;
publicOrderplaceOrder(intcustomerId,ListorderItemList){
inttotal=0;
rendercode;
2、而把这个具体类调用这个接口的相应方法来实现具体的逻辑。
大B:“这样Order类不再是一个抽象类,而是一个具体类。Order类委托OrderHelpher接口来完成placeOrder方法所需的基本操作。像在这种情况下使用策略模式更具有优势,策略模式不需要继承来实现。而是通过一个委托对象来实现。OrderHelper接口无需要去继续任何指定的类。而相对来说,采用策略来实现会更复杂一些。由此可见,模板方法模式主要应用于框架设计中,以确保基类控制处理流程的逻辑顺序(如框架的初始化)。像上面的测试基类中。框架通常需要控制反转。而在一些情况中,优级先考虑使用策略模式:当需要变化的操作非常多时,采用策略模式把这些操作抽取到一个接口。当那些基本操作的实现需要与其它类相关时,应该使用策略模式。通过委托接口把行为与实现完全分离出来(比如数据存取)。 比如订单处理的saveOrder方法,是写入数据库的。它的实现与采用何种持久化模式相关。当某些基本操作的实现可能需要在运行时改变时,可以通过在运行时改变委托对象来实现,而继承则不能。所以才采用策略模式。”
publicclassOrder{
privateOrderHelperorderHelpr;
publicintsaveOrder(intcustomerId,inttotal,ListorderItemList);
其他人正在读 :【天才俱乐部】【重生就别当舔狗了】【制符人】【明日方舟之深海的呼唤】【将夜:吾为当世仙】【殊途仙路】【谁让他修仙的!】【乱战异世之召唤群雄】【世界首富之我是股神】【神农道君】【踏星】【娱乐探秘:我扮演小哥绝不塌房】【玄幻:我是大反派】【大明话事人】【从零开始建立穿越者联盟】【全民星海时代】【欢喜少年:开局冲了醉酒宋倩】【文野:开局怀疑异能力想弑主】【绝世天龙】【从尸解仙开始】【港综从怒火重案开始】【被反派鳏夫盯上了】【路人甲心声泄露后被反派全家团宠了】【枕刀】【龙王医婿全文免费阅读】【美利坚名利双收】【春盼莺来】【正义的使命】【重生99做汽车巨头】【穿进赛博游戏后干掉BOSS成功上位】