<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 117  文章 - 72  trackbacks - 0

    聲明:原創(chuàng)作品(標(biāo)有[原]字樣)轉(zhuǎn)載時(shí)請(qǐng)注明出處,謝謝。

    常用鏈接

    常用設(shè)置
    常用軟件
    常用命令
     

    訂閱

    訂閱

    留言簿(7)

    隨筆分類(130)

    隨筆檔案(123)

    搜索

    •  

    積分與排名

    • 積分 - 155592
    • 排名 - 390

    最新評(píng)論

    [關(guān)鍵字]:java,design pattern,設(shè)計(jì)模式,《Java與模式》學(xué)習(xí),Strategy,策略模式,圖書(shū),折扣,DiscountStrategy
    [環(huán)境]:StarUML5.0 + JDK6
    [作者]:Winty (wintys@gmail.com)
    [正文]:


    package pattern.strategy;

    /**
     * 策略模式:Strategy Pattern
     *
     * 圖書(shū)折扣的計(jì)算:
     * 1、無(wú)折扣
     * 2、固定折扣(例如:提供10元的折扣)
     * 3、百分比折扣(例如:提供7%的折扣)
     *
     * @verison 2009-05-20
     * @author Winty (wintys@gmail.com)
     *
     */
    public class StrategyTest {
        public static void main(String[] args) {
            double discount = 0;
            Book book = new Book(88.5);
           
            book.setStrategy(new NoDiscountStrategy());
            discount = book.getDiscount();
            System.out.println("折扣:" + discount);
           
            book.setStrategy(new FlatDiscountStrategy(10));
            discount = book.getDiscount();
            System.out.println("折扣:" + discount);
           
            book.setStrategy(new PercentageDiscountStrategy(0.07));
            discount = book.getDiscount();
            System.out.println("折扣:" + discount);
        }
    }

    /**
     * 環(huán)境(Context)
     * @author Winty
     *
     */
    class Book{
        private double price;
        private DiscountStrategy strategy;
       
        public Book(double price){
            this.price = price;
        }

        /**
         * 調(diào)用Strategy的策略方法進(jìn)行計(jì)算
         * @return 折扣數(shù)額
         */
        public double getDiscount(){
            strategy.setPrice(price);

            return strategy.calculateDiscount();
        }
       
        public DiscountStrategy getStrategy() {
            return strategy;
        }

        public void setStrategy(DiscountStrategy strategy) {
            this.strategy = strategy;
        }
       
        public double getPrice() {
            return price;
        }

        public void setPrice(double price) {
            this.price = price;
        }
    }

    /**
     * 抽象策略:Strategy
     * @author Winty
     *
     */
    abstract class DiscountStrategy{
        private double price;
       
        public DiscountStrategy(){
        }
       
        /**
         * 策略方法
         * @return 折扣數(shù)額
         */
        public abstract double calculateDiscount();

        public double getPrice() {
            return price;
        }

        public void setPrice(double price) {
            this.price = price;
        }
    }

    /**
     * 具體策略:無(wú)折扣算法
     * @author Winty
     *
     */
    class NoDiscountStrategy extends DiscountStrategy{
        public NoDiscountStrategy(){
        }
       
        @Override
        public double calculateDiscount(){
            return 0.0;
        }
    }

    /**
     * 具體策略:固定量折扣算法
     * @author Winty
     *
     */
    class FlatDiscountStrategy extends DiscountStrategy{
        private double amount;
       
        public FlatDiscountStrategy(double amount){
            this.amount = amount;
        }
       
        @Override
        public double calculateDiscount() {
            return amount;
        }

        public double getAmount() {
            return amount;
        }

        public void setAmount(double amount) {
            this.amount = amount;
        }
    }

    /**
     * 具體策略:百分比折扣策略
     * @author Winty
     *
     */
    class PercentageDiscountStrategy extends DiscountStrategy{
        private double percent;
       
        public PercentageDiscountStrategy(double percent){
            this.percent = percent;
        }

        @Override
        public double calculateDiscount() {
            return getPrice()*percent;
        }

        public double getPercent() {
            return percent;
        }

        public void setPercent(double percent) {
            this.percent = percent;
        }
    }

    原創(chuàng)作品,轉(zhuǎn)載請(qǐng)注明出處。
    作者:Winty (wintys@gmail.com)
    博客:http://m.tkk7.com/wintys
    posted on 2009-05-21 22:21 天堂露珠 閱讀(1302) 評(píng)論(3)  編輯  收藏 所屬分類: Pattern

    FeedBack:
    # re: [原]策略模式 2009-05-22 15:43 BruceLeey
    字體太大啦  回復(fù)  更多評(píng)論
      
    # re: [原]策略模式 2009-05-22 22:20 天堂露珠
    @BruceLeey
    哈哈,個(gè)人習(xí)慣不同。有意把字體調(diào)大的,默認(rèn)字體太小,看著不舒服。  回復(fù)  更多評(píng)論
      
    # re: [原]策略模式 2009-06-01 14:08 鄰居家
    不錯(cuò)啊,轉(zhuǎn)載了啊  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 国产成人亚洲合集青青草原精品 | 一级毛片免费视频| 亚洲aⅴ无码专区在线观看| 337p日本欧洲亚洲大胆精品555588 | 国产高清免费视频| 91在线免费视频| 国产亚洲综合久久| 亚洲国产成人综合精品| 久久久久亚洲AV无码麻豆| 精品亚洲永久免费精品| 亚洲精品无码av天堂| 国产精品深夜福利免费观看| 男男AV纯肉无码免费播放无码| 未满十八18禁止免费无码网站| 中文字幕免费在线视频| 一级毛片aaaaaa视频免费看| 春暖花开亚洲性无区一区二区| 亚洲粉嫩美白在线| 波多野结衣亚洲一级| 亚洲丝袜中文字幕| 亚洲国产成人精品电影| 亚洲精品中文字幕乱码影院| 亚洲成色999久久网站| 亚洲AV无码成人精品区天堂 | 国产精品亚洲精品日韩动图| 亚洲精品国产第一综合99久久| 伊人久久五月丁香综合中文亚洲| 亚洲网站在线播放| 亚洲理论片在线中文字幕| 亚洲国产精品免费在线观看| 亚洲va精品中文字幕| 亚洲免费人成视频观看| 午夜在线a亚洲v天堂网2019| 亚洲精品人成网在线播放影院| 成人亚洲国产va天堂| 亚洲一区二区三区成人网站| 亚洲AV日韩AV永久无码色欲| 美女被免费网站在线视频免费| 偷自拍亚洲视频在线观看99| 又黄又大的激情视频在线观看免费视频社区在线 | 一级毛片a免费播放王色电影|