当前位置: 首页 > news >正文

开发公司以现金方式补贴给客户潍坊网站建设优化

开发公司以现金方式补贴给客户,潍坊网站建设优化,网站建设中的思想和算法,做标书有哪些网站能接到〇、小故事 小王最近一直在寻找商机,他发现商场儿童乐园或者中小学校周围,会有很多小朋友喜欢吃糖果,那么他想设计一款糖果售卖机,让后将这些糖果售卖机布置到商场和学校旁边,这样就能获得源源不断的收益了。 想到这里…

〇、小故事

小王最近一直在寻找商机,他发现商场儿童乐园或者中小学校周围,会有很多小朋友喜欢吃糖果,那么他想设计一款糖果售卖机,让后将这些糖果售卖机布置到商场和学校旁边,这样就能获得源源不断的收益了。

想到这里,说干就干,他绘制出了一台糖果售卖机的操作状态关系流转图,请见下图所示:

如果我们以动作做为一个方法去处理,比如:投入钱币的动作,那么我们就需要按照如下方式去实现方法中的逻辑:

如果已经投了25分钱】提示“已经投入钱币了,你不能再投入钱币了!”;
如果之前没有投过钱】提示“投入钱币成功!”,并且当前的糖果机状态从未投币状态变为已投币状态
如果糖果机里无糖果】提示“糖果已经卖光了,你不能往里投入钱币了!
如果糖果正在出货中】提示“请等一等,糖果正在出货中。你不用在投入钱币了!

针对以上逻辑,代码实现如下所示:

final static int SOLD_OUT = 0; // 糖果售罄
final static int NO_QUARTER = 1; // 没有投入钱币
final static int HAS_QUARTER = 2; // 已经投入钱币
final static int SOLD = 3; // 正在出售糖果public void insertQuarter() {if(state == HAS_QUARTER) {System.out.println("已经投入钱币了,你不能再投入钱币了");} else if(state == NO_QUARTER) {state = HAS_QUARTER;// 将糖果机的状态改为HAS_QUARTER(已投币)System.out.println("投入钱币成功");} if(state == SOLD_OUT) {System.out.println("糖果已经卖光了,你不能往里投入钱币了");} if(state == SOLD) {System.out.println("请等一等,糖果正在出货中。你不用在投入钱币了");}
}

那么其他的动作,比例:转动曲柄退回钱币操作发放糖果等,也需要按照上面的写法去实现逻辑。显然,通过这么一大堆的if...else是不优雅的,而且当增加一个全新的状态的时候,所有的动作都需要兼容这个新的动作,那么,这个就是很明显的基于过程编程了,针对以上的问题,我们可以使用今天要介绍的设计模式来解决——状态模式

一、模式定义

状态模式State Pattern

允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

状态模式和策略模式的区别——意图是不同的

状态模式】随着时间流逝,当前状态在状态对象集合中游走改变,以反映出context内部的状态。客户对其基本不了解。它是针对具有很多条件判断的替代方案。
策略模式】客户通常主动指定context索要组合的策略对象是哪一个。它是继承之外的一种弹性替代方案。

二、模式类图

针对上面的介绍,我们来构造一下状态模式的类图,首先,创建状态接口State.java,接口里面包含了“插入硬币”、“退出硬币”、“扭转曲柄”和“发放糖果”这四个操作,那么具体的动作实现逻辑是与不同状态实现类一一对应的,也就是说,不同状态实现类负责各自的四个动作方法的具体实现。针对状态接口,我们创建4个实现类,分别是:糖果售卖状态类SoldState.java糖果售空状态类SoldOutState.java已经投放钱币状态类HasQuarterState.java没有投放钱币状态类NoQuarterState.java,那么当前处于哪个状态则由糖果售卖机类GumballMachine.java维护。具体类图请见下图所示:

三、代码实现

状态接口类State.java

public interface State {void insertQuarter(); // 投入硬币操作   void ejectQuarter(); // 退出硬币操作void turnCrank(); // 扭转曲柄操作void dispense(); // 发放糖果操作
}

糖果售卖状态类SoldState.java

public class SoldState implements State {private GumballMachine gumballMachine;public SoldState(GumballMachine gumballMachine) {this.gumballMachine = gumballMachine;}@Overridepublic void insertQuarter() {System.out.println("糖果正在出货中,请稍等。无须再次投入钱币!");}@Overridepublic void ejectQuarter() {System.out.println("糖果正在出货中,请稍等。不能退回钱币!");}@Overridepublic void turnCrank() {System.out.println("糖果正在出货中,请稍等。不需要再次扭转曲柄!");}@Overridepublic void dispense() {if (gumballMachine.getCount() > 0) {System.out.println("糖果正在出货中,请稍等!");gumballMachine.releaseBall();gumballMachine.setState(gumballMachine.getNoQuarterState()); // 状态流转} else {System.out.println("糖果库存不足,无法出货!");gumballMachine.setState(gumballMachine.getSoldOutState()); // 状态流转}}
}

糖果售空状态类SoldOutState.java

public class SoldOutState implements State {private GumballMachine gumballMachine;public SoldOutState(GumballMachine gumballMachine) {this.gumballMachine = gumballMachine;}@Overridepublic void insertQuarter() {System.out.println("糖果已经售罄。不能投入钱币");}@Overridepublic void ejectQuarter() {System.out.println("退回钱币成功!");}@Overridepublic void turnCrank() {System.out.println("糖果已经售罄。不能扭转曲柄!");}@Overridepublic void dispense() {System.out.println("糖果已经售罄。糖果无法出售!");}
}

已经投放钱币状态类HasQuarterState.java

public class HasQuarterState implements State {private GumballMachine gumballMachine;public HasQuarterState(GumballMachine gumballMachine) {this.gumballMachine = gumballMachine;}@Overridepublic void insertQuarter() {System.out.println("您已经投入钱币!无须再次投入钱币!");}@Overridepublic void ejectQuarter() {System.out.println("退款成功!");gumballMachine.setState(gumballMachine.getNoQuarterState()); // 状态流转}@Overridepublic void turnCrank() {System.out.println("正在出货中,请稍等");gumballMachine.setState(gumballMachine.getSoldState()); // 状态流转}@Overridepublic void dispense() {System.out.println("你还没有扭转曲柄,糖果不可以发放!");}
}

没有投放钱币状态类NoQuarterState.java

public class NoQuarterState implements State {private GumballMachine gumballMachine;public NoQuarterState(GumballMachine gumballMachine) {this.gumballMachine = gumballMachine;}@Overridepublic void insertQuarter() {System.out.println("投入钱币成功!");gumballMachine.setState(gumballMachine.getHasQuarterState()); // 状态流转}@Overridepublic void ejectQuarter() {System.out.println("你还没有投入钱币,不能退回钱币!");}@Overridepublic void turnCrank() {System.out.println("你还没有投入钱币,不能扭转曲柄!");}@Overridepublic void dispense() {System.out.println("你还没有投入钱币,糖果不可以发放!");}
}

糖果售卖机类GumballMachine.java

@Data
public class GumballMachine {private State noQuarterState;private State hasQuarterState;private State soldState;private State soldOutState;private State state = soldOutState; // 糖果机默认状态为售罄状态int count = 0; // 糖果库存量public GumballMachine(int numberGumballs) {noQuarterState = new NoQuarterState(this);hasQuarterState = new HasQuarterState(this);soldState = new SoldState(this);soldOutState = new SoldOutState(this);count = numberGumballs;if (numberGumballs > 0) {state = noQuarterState; // 如果采购了糖果球(numberGumballs>0),则糖果机的状态为未投币状态}}// 投入钱币public void insertQuarter() {state.insertQuarter();}// 退出钱币public void ejectQuarter() {state.ejectQuarter();}// 扭转曲柄public void turnCrank() {state.turnCrank();state.dispense();}// 减少库存public void releaseBall() {if (count > 0) {System.out.println("一个糖果球正在出库");--count;} else {System.out.println("库存不足,一个糖果球无法出库");}}// 设置状态void setState(State state) {this.state = state;}
}

状态模式测试类StateTest.java

public class StateTest {public static void main(String[] args) {System.out.println("-----向糖果机中放入1枚糖果-----");GumballMachine machine = new GumballMachine(1);System.out.println("-----第一次购买糖果-----");machine.insertQuarter();machine.ejectQuarter();machine.turnCrank();System.out.println("-----第二次购买糖果-----");machine.insertQuarter();machine.turnCrank();System.out.println("-----第三次购买糖果-----");machine.insertQuarter();machine.turnCrank();machine.ejectQuarter();}
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

http://www.ds6.com.cn/news/35596.html

相关文章:

  • 触摸终端软件门户网站网站买卖交易平台
  • 在线支付 网站模板网站seo优化运营
  • 浙江网站建设哪里好沈阳cms模板建站
  • 广州官方网站建设简单的网页设计作品
  • 网站的类型和特色百度一下官方网
  • java和php做网站seo课程培训课程
  • 软件开发培训哪有郑州网站优化公司
  • 电器网站建设策划书世界杯最新排名
  • html5 珠宝网站域名关键词查询
  • 视频网站直播怎么做的百度sem优化师
  • 网站想换一个空间怎么办网络营销策划书800字
  • 爱站网主要功能湖南广告优化
  • 网址导航是ie浏览器吗seo高级
  • 成都网站建设与推广广州百度搜索优化
  • 郑州航海路附近网站建设公司淘宝搜索关键词排名
  • 网站读取错误时怎样做semester
  • 免费网站发布怎么做的百度开户是什么意思
  • 炫酷个人网站简述网站推广的方式
  • 商城网站服务器租用互动营销
  • 网站兼容工具广东深圳疫情最新
  • 建设银行网站怎么打印明细全世界足球排名国家
  • 可以做链接的网站网上推广企业
  • 广州专业的网站建设公司排名图片识别 在线百度识图
  • php网站上线网店怎么推广和宣传
  • 如何做网站alexa排名超级优化
  • 怎么样可以做网站seo外链购买
  • 上海专业网站建设价格低百度推广开户费用
  • 夏天做啥网站致富网站怎么被百度收录
  • 长春网站建设哪家专业腾讯广告
  • 做装修有什么好网站可以做黑帽seo是作弊手法