欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計模式之Strategy模式

 更新時間:2016年07月17日 21:43:11   投稿:hebedich  
Strategy模式即策略模式,就是將一個算法的不同實現(xiàn)封裝成一個個單獨的類,這些類實現(xiàn)同一個接口,使用者直接使用該接口來訪問具體的算法。這個樣子,使用者就可以使用不同的算法來實現(xiàn)業(yè)務(wù)邏輯了。

基于有了OO的基礎(chǔ)后,開始認(rèn)真學(xué)習(xí)設(shè)計模式!設(shè)計模式是java設(shè)計中必不可少的!

Apple.java

package strategy;
/**
 * 
 * @author Andy
 *
 */
 
public class Apple implements Discountable {
  //重量
  private double weight;
  //單價 實際開發(fā)中 設(shè)計金錢等精確計算都是BigDecimal;
    private double price;
    //按購買量打折
  // private Discountor d = new AppleWeightDiscountor();
    //按購買總價打折
    private Discountor d = new ApplePriceDiscountor();
     
  public double getWeight() {
    return weight;
  }
   
  public void setWeight(double weight) {
    this.weight = weight;
  }
   
  public double getPrice() {
    return price;
  }
   
  public void setPrice(double price) {
    this.price = price;
  }

  public Apple (double weight,double price ){
   
    super();
    this.weight=weight;
    this.price=price;
  }
 
  @Override
  public void discountSell() {
     d.discount(this);
  }  
}

Banana.java

package strategy;
/**
 * 
 * @author Andy
 *
 */
public class Banana implements Discountable {
  //重量
  private double weight;
////單價 實際開發(fā)中 涉及金錢等精確計算都是用BigDecimal
  private double price;
   
  public Banana(double weight, double price) {
    super();
    this.weight = weight;
    this.price = price;
  }
 
  public double getWeight() {
    return weight;
  }
   
  public void setWeight(double weight) {
    this.weight = weight;
  }
   
  public double getPrice() {
    return price;
  }
   
  public void setPrice(double price) {
    this.price = price;
  }
 
  @Override
  public void discountSell() {
    //打折算法
    if(weight < 5) {
      System.out.println("Banana未打折價錢: " + weight * price);
    }else if(weight >= 5 && weight < 10) {
      System.out.println("Banana打八八折價錢: " + weight * price * 0.88 );
    }else if(weight >= 10) {
      System.out.println("Banana打五折價錢: " + weight * price * 0.5 );
    }    
     
  }

}

Market.java

package strategy;
/**
 * 
 * @author Andy
 *
 */
public class Market {
   
  /**
   * 對可打折的一類事物進(jìn)行打折
   * @param apple
   */

  public static void discountSell(Discountable d) {
    d.discountSell();

}
}

Discountable.java

package strategy;
/**
 * 
 * @author Andy
 *
 */
public interface Discountable {
  public void discountSell();
}

Test.java

package strategy;
/**
 * 
 * @author Andy
 *
 */
public class Test {
   
  /**
   * 
   * @param args
   */
 
  public static void main(String[] args) {
//    只能對蘋果打折 還不能對通用的一類事物打折 而且都是要賣什么就寫什么打折算法 
//   其實每類事物打折算法又是不一致的
    Discountable d = new Apple(10.3, 3.6);
    Discountable d1= new Banana(5.4,1.1);
      Market.discountSell(d);
      Market.discountSell(d1);
     
 
  }
 
}

相關(guān)文章

  • Java實現(xiàn)重定向過程中添加請求頭信息

    Java實現(xiàn)重定向過程中添加請求頭信息

    在Java中,我們經(jīng)常需要使用網(wǎng)絡(luò)請求來與服務(wù)器進(jìn)行通信,在進(jìn)行網(wǎng)絡(luò)請求時,有時我們需要在重定向過程中添加請求頭信息,本文將介紹如何使用Java在重定向過程中添加請求頭,并提供相應(yīng)的代碼示例,
    2023-10-10
  • Java Web Listener實現(xiàn)事件監(jiān)聽與處理

    Java Web Listener實現(xiàn)事件監(jiān)聽與處理

    Java Web開發(fā)中的Listener是一種事件機(jī)制,通過監(jiān)聽Web應(yīng)用程序的事件,實現(xiàn)對事件的處理,從而實現(xiàn)更加靈活和高效的應(yīng)用程序開發(fā)。Listener能夠監(jiān)聽的事件包括應(yīng)用程序啟動和關(guān)閉、Session創(chuàng)建和銷毀、請求和響應(yīng)對象的創(chuàng)建和銷毀等
    2023-04-04
  • Spring 事務(wù)事件監(jiān)控及實現(xiàn)原理解析

    Spring 事務(wù)事件監(jiān)控及實現(xiàn)原理解析

    本文首先會使用實例進(jìn)行講解Spring事務(wù)事件是如何使用的,然后會講解這種使用方式的實現(xiàn)原理。感興趣的朋友跟隨小編一起看看吧
    2018-09-09
  • SpringBoot開發(fā)存儲服務(wù)器實現(xiàn)過程詳解

    SpringBoot開發(fā)存儲服務(wù)器實現(xiàn)過程詳解

    這篇文章主要為大家介紹了SpringBoot開發(fā)存儲服務(wù)器實現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Java8新日期時間API的20個使用示例

    Java8新日期時間API的20個使用示例

    這篇文章主要介紹了Java8新日期時間API的20個使用示例,為了學(xué)習(xí)Java 8的這個新庫,這里我創(chuàng)建了20個以任務(wù)為導(dǎo)向的例子,需要的朋友可以參考下
    2015-03-03
  • startActivityForResult和setResult案例詳解

    startActivityForResult和setResult案例詳解

    這篇文章主要介紹了startActivityForResult和setResult案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 關(guān)于JpaRepository的關(guān)聯(lián)查詢和@Query查詢

    關(guān)于JpaRepository的關(guān)聯(lián)查詢和@Query查詢

    這篇文章主要介紹了JpaRepository的關(guān)聯(lián)查詢和@Query查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java基于Session登錄驗證的實現(xiàn)示例

    Java基于Session登錄驗證的實現(xiàn)示例

    基于Session的登錄驗證方式是最簡單的一種登錄校驗方式,本文主要介紹了Java基于Session登錄驗證的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • IntelliJ?IDEA?2023.2最新版激活方法及驗證ja-netfilter配置是否成功

    IntelliJ?IDEA?2023.2最新版激活方法及驗證ja-netfilter配置是否成功

    隨著2023.2版本的發(fā)布,用戶們渴望了解如何激活這個最新版的IDE,本文將介紹三種可行的激活方案,包括許可證服務(wù)器、許可證代碼和idea?vmoptions配置,幫助讀者成功激活并充分利用IDEA的功能,感興趣的朋友參考下吧
    2023-08-08
  • Maven倉庫分類的優(yōu)先級

    Maven倉庫分類的優(yōu)先級

    本文主要介紹了Maven倉庫分類的優(yōu)先級,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評論