Java设计模式之Strategy模式

 更新时间:2016年07月17日 21:43:11   投稿:hebedich  
Strategy模式即策略模式,就是将一个算法的不同实现封装成一个个单独的类,这些类实现同一个接口,使用者直接使用该接口来访问具体的算法。这个样子,使用者就可以使用不同的算法来实现业务逻辑了。

基于有了OO的基础后,开始认真学习设计模式!设计模式是java设计中必不可少的!

Apple.java

package strategy;
/**
 * 
 * @author Andy
 *
 */
 
public class Apple implements Discountable {
  //重量
  private double weight;
  //单价 实际开发中 设计金钱等精确计算都是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;
////单价 实际开发中 涉及金钱等精确计算都是用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 {
   
  /**
   * 对可打折的一类事物进行打折
   * @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);
     
 
  }
 
}

相关文章

  • springboot整合druid及多数据源配置的demo

    springboot整合druid及多数据源配置的demo

    这篇文章主要介绍了springboot整合druid及多数据源配置的demo,本篇主要分两部分 ①springboot整合druid的代码配置,以及druid的监控页面演示;②对实际场景中多数据源的配置使用进行讲解,需要的朋友可以参考下
    2024-01-01
  • Java中获取文件大小的详解及实例代码

    Java中获取文件大小的详解及实例代码

    这篇文章主要介绍了Java中获取文件大小的详解及实例代码的相关资料,一种是使用File的length()方法,另外一种是使用FileInputStream的available()方法,这里就说下如何使用需要的朋友可以参考下
    2016-12-12
  • java 实现迷宫回溯算法示例详解

    java 实现迷宫回溯算法示例详解

    这篇文章主要介绍了java 实现迷宫回溯算法示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java代码读取properties配置文件的示例代码

    Java代码读取properties配置文件的示例代码

    这篇文章主要介绍了Java代码读取properties配置文件,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • j2ee之AJAX二级联动效果

    j2ee之AJAX二级联动效果

    这篇文章主要为大家详细介绍了j2ee之AJAX二级联动效果的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 一文带你搞懂Java中线程的创建方式

    一文带你搞懂Java中线程的创建方式

    这篇文章主要为大家详细介绍了Java中线程的创建方式的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2023-03-03
  • Java实现简单修改文件名的方法分析

    Java实现简单修改文件名的方法分析

    这篇文章主要介绍了Java实现简单修改文件名的方法,结合具体实例分析了2种比较常用的java文件名修改方法,需要的朋友可以参考下
    2017-09-09
  • JDBC示例代码

    JDBC示例代码

    本教程提供了如何创建一个简单的JDBC应用程序的示例。演示如何打开一个数据库连接,执行SQL查询,并显示结果
    2014-03-03
  • SpringBoot3集成ElasticSearch的方法详解

    SpringBoot3集成ElasticSearch的方法详解

    Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎,适用于各种数据类型,数字、文本、地理位置、结构化数据、非结构化数据,本文给大家详解介绍了SpringBoot3集成ElasticSearch的方法,需要的朋友可以参考下
    2023-08-08
  • java中 == 与 equal 的区别讲解

    java中 == 与 equal 的区别讲解

    这篇文章介绍了java中 == 与 equal 的区别,有需要的朋友可以参考一下
    2013-10-10

最新评论