Java设计模式之Strategy模式

所属分类: 软件编程 / java 阅读数: 28
收藏 0 赞 0 分享

基于有了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);
     
 
  }
 
}

更多精彩内容其他人还在看

Springmvc restful配置遇到的小坑

本文是小编给大家带了的Springmvc restful配置遇到的小小坑,小编给大家带来了问题原因及解决办法,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
收藏 0 赞 0 分享

Java中的匿名内部类小结

java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。这篇文章主要介绍了Java中的匿名内部类的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java的云打印Lodop

这篇文章主要介绍了Java的云打印Lodop 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java线程池框架核心代码解析

这篇文章主要针对Java线程池框架核心代码进行详细解析,分析Java线程池框架的实现ThreadPoolExecutor,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java 交换两个变量的数值实现方法

下面小编就为大家带来一篇Java 交换两个变量的数值实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

全面了解JAVA_BaseDAO数据处理类

下面小编就为大家带来一篇全面了解JAVA_BaseDAO数据处理类。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java、python、JavaScript以及jquery循环语句的区别

本篇文章主要介绍java、python、JavaScript以及jquery的循环语句的区别,这里整理了它们循环语句语法跟示例,以便大家阅读,更好的区分它们的不同
收藏 0 赞 0 分享

基于JDBC封装的BaseDao(实例代码)

下面小编就为大家带来一篇基于JDBC封装的BaseDao(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

简单通用JDBC辅助类封装(实例)

下面小编就为大家带来一篇简单通用JDBC辅助类封装(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈java线程中生产者与消费者的问题

下面小编就为大家带来一篇浅谈java线程中生产者与消费者的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多