Chapter 2.策略模式
首先贴一段代码:
package xiao;
import java.util.Scanner;
class CashSuper{
private int num;
private double price;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double acceptCash(double money){
return money;
}
}
class CashNormal extends CashSuper{
}
class CashRebate extends CashSuper{
private double rebate;
public CashRebate(double rebate){
this.rebate = rebate;
}
public double getRebate() {
return rebate;
}
public void setRebate(double rebate) {
this.rebate = rebate;
}
public double acceptCash(double money){
return money*rebate;
}
}
class CashReturn extends CashSuper{
private double moneyCondition;
private double moneyReturn;
public CashReturn(double moneyCondition,double moneyReturn){
this.moneyCondition = moneyCondition;
this.moneyReturn = moneyReturn;
}
public double getMoneyCondition() {
return moneyCondition;
}
public void setMoneyCondition(double moneyCondition) {
this.moneyCondition = moneyCondition;
}
public double getMoneyReturn() {
return moneyReturn;
}
public void setMoneyReturn(double moneyReturn) {
this.moneyReturn = moneyReturn;
}
public double acceptCash(double money){
if(money > moneyCondition){
return money - Math.floor(money/moneyCondition)*moneyReturn;
}else{
return money;
}
}
}
class CashFactory{
public static CashSuper creatCash(String select){
CashSuper cash = new CashSuper();
Scanner in = new Scanner(System.in);
switch(select){
case"normal":
cash = new CashNormal();
break;
case"rebate":
System.out.print("please enter the rebate: ");
double rebat = in.nextDouble();
cash = new CashRebate(rebat);
break;
case"return":
System.out.print("please enter the moneyCondition: ");
double moneyCondition = in.nextDouble();
System.out.print("please enter the moneyReturn: ");
double moneyReturn = in.nextDouble();
cash = new CashReturn(moneyCondition,moneyReturn);
break;
}
in.close();
return cash;
}
}
class CashContext{
CashSuper cs =null;
Scanner in = new Scanner(System.in);
public CashContext(String type){
switch(type){
case"normal":
CashNormal cash0 = new CashNormal();
cs = cash0;
break;
case"rebate":
System.out.print("please enter the rebate: ");
double rebat = in.nextDouble();
CashRebate cash1 = new CashRebate(rebat);
cs = cash1;
break;
case"return":
System.out.print("please enter the moneyCondition: ");
double moneyCondition = in.nextDouble();
System.out.print("please enter the moneyReturn: ");
double moneyReturn = in.nextDouble();
CashReturn cash2 = new CashReturn(moneyCondition,moneyReturn);
cs = cash2;
break;
}
}
public double GetResult(double money){
return cs.acceptCash(money);
}
}
public class TestDemo{
public static void main(String[] args)throws Exception{
Scanner in = new Scanner(System.in);
System.out.print("please enter the price: ");
double price = in.nextDouble();
System.out.print("please enter the num: ");
int num = in.nextInt();
System.out.print("please enter the select: ");
String select = in.next();
CashContext csuper = new CashContext(select);
System.out.println(csuper.GetResult(num*price));
in.close();
}
}
策略模式:一种定义一系列算法的方法。所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。
策略模式是用来封装算法的,只要在分析过程中听到需要再不同时间应用不同的业务规则,就可以考虑。
Chapter 2.策略模式的更多相关文章
- C++ 之 策略模式
1 会飞的鸭子 Duck 基类,包含两个成员函数 swim() 和 display():派生类 MallardDuck,RedheadDuck 和 RubberDuck,各自重写 display() ...
- Python设计模式: 最佳的"策略"模式实践代码
Python设计模式: 最佳的"策略"模式实践代码 今天抽空看了下流畅的python,发现里面介绍了不少python自带的库的使用实例,用起来非常的优雅. 平时用Python来写爬 ...
- javascript设计模式:策略模式
前言 策略模式有效利用组合.委托.多态等技术和思想,可以有效避免多重条件选择语句. 策略模式对开放-封闭原则提供了很好的支持,将算法封装在strategy中,使得他们易于切换.理解.扩展. 策略模式中 ...
- StrategyPattern (策略模式)
/** * 策略模式 * @author TMAC-J * 根据环境的不同选择不同的策略,把策略用接口抽象出来 */ public class StrategyPattern { interface ...
- JAVA 设计模式之策略模式
定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换.在前面说过 ...
- Java设计模式之策略模式(Strategy)
前言: 最近一直在学习基于okHttp网络请求,学习的过程中就想起了之前项目中有这么一个需求不同的接口要采用不同的加密方式,比如登录之前要采用RSA加密,登录之后要采用AES加密,当时是采用靠传递一个 ...
- 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)
在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了“工厂模式”.“策略模式”.“状态模式”等.当然在重构时,有的地 ...
- 《Head First 设计模式》之策略模式
作者:Grey 原文地址:http://www.cnblogs.com/greyzeng/p/5915202.html 模式名称 策略模式(Strategy Pattern) 需求 模拟鸭子游戏,游戏 ...
- 学C#之设计模式系列笔记(1)策略模式
一.借鉴说明 1.<Head First Design Patterns>(中文名<深入浅出设计模式>) 2.维基百科,策略模式,https://zh.wikipedia.or ...
随机推荐
- [LeetCode]题解(python):006-ZigZag Conversion
题目来源: https://leetcode.com/problems/zigzag-conversion/ 题意分析: 这道题目是字符串处理的题目.输入一个字符串和一个数字,将字符串填入倒Z形输入字 ...
- python re(正则模块)
参考文档:http://blog.csdn.net/wusuopubupt/article/details/29379367 ipython环境中,输入"?re",官方解释如下: ...
- Android平台APK分析工具包androguard的部署使用和原理分析
原创文章,转载请注明出处,谢谢. Android应用程序分析主要有静态分析和动态分析两种,常见的静态分析工具是Apktool.dex2jar以及jdgui.今天突然主要到Google code上有个叫 ...
- HTTP使用BASIC认证的原理及实现方法 (转载)
转自:http://blog.itpub.net/23071790/viewspace-709367 一. BASIC认证概述 在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许 ...
- ISO/IEC 14443协议浅谈
一. 非接触IC卡简介 非接触IC卡又称射频卡,是射频识别技术和IC卡技术有机结合的产物.它解决了无源(卡中无电源)和免接触这一难题,具有更加方便.快捷的特点,广泛用于电子支付.通道控制.公交收费.停 ...
- Protel99se教程五:protel99se的自动布线
在上一节课的protel99se教程中,我们给大家演示的是,如何快速的将SCH原理PCB,也就是将元件转到PCB中,在这一节课,我们主要给大家讲解的是何在protel99se快速布线,我们在这节课当中 ...
- SQL中采用Newtonsoft.Json处理json字符串
原文 SQL中采用Newtonsoft.Json处理json字符串 使用环境: SQL Server2005; VS2010; 关于SQL中部署CLR程序集的方法,网上一搜一大把,需要了解的自行查阅, ...
- STL deque详解
英文原文:http://www.codeproject.com/Articles/5425/An-In-Depth-Study-of-the-STL-Deque-Container 绪言 这篇文章深入 ...
- VS2010/MFC对话框:非模态对话框的创建及显示
非模态对话框的创建及显示 上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切 ...
- iOS开展-CocoaPods安装和使用教程
原文链接: iOS开展-CocoaPods安装和使用教程 修正已经增加了自己的理解. CocoaPods安装和使用教程 Code4App 原创文章.转载请注明出处:http://code4app.co ...