快速业务通道

使用Java设计一个图书打折系统 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
);    }    public void printPayList(){     _order.printPayList();    }    public void addPolicy(){     _order.addPolicy();    } }

根据打折消息[4]:“购买5本以上的图书,固定折扣为20元”,得到具体装饰角色CopyDecorator。它将重写addPolicy()方法。

CopyDecorator.java

package com.zj.order.decorator; import com.zj.order.Order; public class CopyDecorator extends OrderDecorator {    public CopyDecorator(Order order) {     super(order);    }    public void addPolicy() {     if (getCopies() > 5)       setDiscount(discount() + 20);     super._order.addPolicy();    } }

根据打折消息[5]:“在所有的折扣计算后,总的折扣价不得超过50元”,得到具体装饰角色PayDecorator。它将重写addPolicy()方法。

必须注意两个装饰类产生的先后顺序。

PayDecorator.java

package com.zj.order.decorator; import com.zj.order.Order; public class PayDecorator extends OrderDecorator {    public PayDecorator(Order order) {     super(order);    }    public void addPolicy() {     if (discount() > 50)       setDiscount(50);     super._order.addPolicy();    } }

使用Java设计一个图书打折系统(7)

时间:2011-03-23 zhangjunhd

4.客户端实现

Client中先演示了没有装饰类,即只实现打折消息[1],[2],[3]的情况,此时原价300元的货款折扣为36元;而后加上了两个装饰类后,由于购买六本书,另加29元折扣后总折扣变为56,超过50元的折扣上限,所以最终折扣为50元。

Client.java

package com.zj.client;
import com.zj.books.BookType;
import com.zj.order.Order;
import com.zj.order.PayOrder;
import com.zj.order.decorator.CopyDecorator;
import com.zj.order.decorator.PayDecorator;
public class Client {
    public static void main(String[] args) {
       Order order = new PayOrder(10, 0.1);
       order.buy(1, "Java", 40, BookType.COMPUTER);
       order.buy(1, "C++", 60, BookType.COMPUTER);
       order.buy(1, "Design Pattern", 100, BookType.COMPUTER);
       order.buy(1, "Manager", 60, BookType.MANAGEMENT);
       order.buy(1, "Apo", 20, BookType.NEW_RELEASE);

       order.buy(1, "droAq", 20, BookType.NEW_RELEASE);
       order.printPayList();
       System.out.println("===========");
       System.out.println("original\t"+order.originalPay());
       System.out.println("discount\t"+order.discount());
       System.out.println("actual\t\t"+order.actualPay());
       System.out.println("===========");
       order=new CopyDecorator(new PayDecorator(order));
       order.addPolicy();
       System.out.println("original\t"+order.originalPay());
       System.out.println("discount\t"+order.discount());
       System.out.println("actual\t\t"+order.actualPay());
    }
}

结果

{Apo=1, Manager=1, droAq=1, C++=1, Design Pattern=1, Java=1} =========== original  300.0 discount  36.0 actual   264.0 =========== original  300.0 discount  50.0 actual   250.0

本文出自 “子 孑” 博客,请务必保留此出处http:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号