首页 > 其他分享 >大话设计模式--------第二章策略模式

大话设计模式--------第二章策略模式

时间:2022-09-28 22:24:18浏览次数:48  
标签:-------- double 大话 public AbstractMemberStrategy Context new 设计模式 price

第二章策略模式

策略模式的概念很好理解,它将对象和行为分开,将行为定义为 一个行为接口和具体行为的实现,每个if判断都可以理解为一个策略。

比如商场有三种客户,第一种打8折,第二种打9折,第三中不打折,行为接口就是定义一个打折方法,然后所有类来实现这个接口,最后再用环境类来调用策略接口,然后get,set方法,以及策略接口的方法调用,最后在客户类中直接实现方法!

 

行为接口:打折

public interface AbstractMemberStrategy {

  public double calcPrice(double price, int n);

}

高级客户

public class StrategyAdvanceMember implements AbstractMemberStrategy{
  @Override
  public double calcPrice(double price, int n) {
      double money = price * n *0.8;
      return money;
  }
}

中级客户

public class StrategyIntermediateMember implements AbstractMemberStrategy{
  @Override
  public double calcPrice(double price, int n) {
      double money = price * n*0.9;
      return money;
  }
}

初级客户

public class StrategyPrimaryMember implements AbstractMemberStrategy{
  @Override
  public double calcPrice(double price, int n) {
      return price * n;
  }
}

环境类:选择方法

public class Context {
  // 用户折扣策略接口
  private AbstractMemberStrategy memberStrategy;

  public Context(AbstractMemberStrategy memberStrategy) {
      this.memberStrategy = memberStrategy;
  }


  public double ChargePrice(double price, int n)
  {
      return memberStrategy.calcPrice(price,n);
  }
}

客户界面

public class Client {
  public static void main(String[] args) {
      // 具体策略类
      AbstractMemberStrategy primaryMemberStrategy = new StrategyPrimaryMember();
      AbstractMemberStrategy intermediateMemberStrategy = new StrategyIntermediateMember();
      AbstractMemberStrategy advanceMemberStrategy = new StrategyAdvanceMember();

      // 用户选择不同策略
      Context primaryContext = new Context(primaryMemberStrategy);
      Context intermediateContext = new Context(intermediateMemberStrategy);
      Context advanceContext = new Context(advanceMemberStrategy);

      //一本100块钱的书
      // 普通会员:100
      System.out.println("普通会员的价格:"+ primaryContext.ChargePrice(100,1));
      // 中级会员 90
      System.out.println("中级会员的价格:"+ intermediateContext.ChargePrice(100,1));
      // 高级会员 80
      System.out.println("高级会员的价格:"+ advanceContext.ChargePrice(100,1));
  }
}
 

标签:--------,double,大话,public,AbstractMemberStrategy,Context,new,设计模式,price
From: https://www.cnblogs.com/shuangshuangzi/p/16739767.html

相关文章

  • 代码对比工具,就用这7个!
    在程序开发的过程中,程序员会经常对源代码以及库文件进行代码对比,在这篇文章里我们向大家介绍7款程序员常用的代码比较工具。一、WinMerge WinMerge是一款运行于Wind......
  • SpringBoot系列——加载自定义配置文件
    Java开发过程中,一些配置信息不想写到application.properties里面去,想自己弄一个配置文件,然后加载。例子如下:Employee.java类核心代码:@Configuration//用来标注一个自定......
  • CF1182E 名字太长不想打 题解
    题解区都是用矩阵直接算封闭形式中\(f_1,f_2,f_3\)的系数的,这里给个更偏MO风格的做法。首先先想办法用\(f_x\cdotk(x)\)代\(f_x\)以消掉\(c^{2x+6}\)这个不好......
  • lc_top_0928
    lc25k个一组反转单链表classSolution{publicListNodereverseKGroup(ListNodehead,intk){ListNodedummy=newListNode(0,head);ListN......
  • LeetCode[13] 罗马数字转整数
    1罗马数转整数1.1题目描述        罗马数字包含以下七种字符: I, V, X, ``L,C,D 和 M`。字符数值I1V5X10L50C100D500M100......
  • 企业微信创建群机器人
    1.选择群,右键点击“管理聊天信息“   2.添加机器人的信息        3.创建好的机器人都有一个唯一的Webhook地址,点击Webhook地址就可以看到文档说......
  • 实验1 类和对象(1)
    #include<iostream>usingstd::cout;usingstd::endl;classPoint{ public: Point(intx0=0,inty0=0); Point(constPoint&p); ~Point()=default; intg......
  • 实验2:Open vSwitch虚拟交换机实践
    (一)基本要求a)/home/用户名/学号/lab2/目录下执行ovs-vsctlshow命令、以及p0和p1连通性测试的执行结果截图;b)/home/用户名/学号/lab2/目录下开启MininetCLI并执行pi......
  • Exception in thread "main" java.util.NoSuchElementException
    Exceptioninthread"main"java.util.NoSuchElementException用了两个scanner的时候,执行程序发生报错:Exceptioninthread"main"java.util.NoSuchElementExceptionat......
  • Java: Memento Pattern
     /***版权所有2022涂聚文有限公司*许可信息查看:*描述:*备忘录模式MementoPattern/SnapshotPattern/TokenPattern*历史版本:JDK14.02*2022-09-1......