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

电路板东莞网站建设wordpress 很差

电路板东莞网站建设,wordpress 很差,上海外贸网站开发,上海网址一360导航什么是状态模式 状态模式是指允许一个对象在其内部状态改变时改变他的行为,对象看起来似乎改变了整个类。     状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状…

什么是状态模式

    状态模式是指允许一个对象在其内部状态改变时改变他的行为,对象看起来似乎改变了整个类。
    状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的行为对客户端是透明的。
    状态模式主要包含以下几个角色:
        Context(环境):拥有多种状态的对象,由于环境类的状态存在多样性且在不同状态下对象的行为有所不同,因此将状态独立出来形成单独的状态类。
        State(抽象状态类):定义一个接口以封装与环境类的一个特定相关行为,在抽象状态类中声明了各种不同状态对应的方法,而且在子类中都进行了实现。
        ConcreteState(具体状态类):抽象状态类的子类,每一个子类实现一个与环境类的一个状态相关的行为,每一个具体状态类对应环境的一个具体状态。

状态模式的优缺点

优点

  1. 封装了状态的转换规则,在状态模式中可以将状态的转换代码封装在环境类或者具体状态类中,可以对状态转换代码集中管理。
  2. 将所有与某个状态有关的行为放到一个类中,只需要注入一个不同的状态对象即可使环境拥有不同的行为。
  3. 允许状态转换逻辑和状态对象合成一体,而不是提供一个巨大的条件语句块。
  4. 可以让多个环境对象共享一个状态对象。

缺点

  1. 会增加系统中对象和类的个数,导致系统运行开销大。
  2. 状态模式的结构和实现较为复杂,如果使用不当导致代码混乱。

状态模式的应用场景

  1. 对象的行为依赖于他的状态,状态的改变将导致行为的改变。
  2. 包含大量的与对象状态相关的条件语句。

状态模式的案例

// 抽象状态类
public abstract class State {/*** 扣除积分 - 50*/public abstract void deductMoney();/*** 是否抽中奖品** @return boolean*/public abstract boolean raffle();/*** 发放奖品*/public abstract void dispensePrize();}// 具体状态类
public class NoRaffleState extends State {RaffleActivity activity;public NoRaffleState(RaffleActivity activity) {this.activity = activity;}@Overridepublic void deductMoney() {System.out.println("扣除50积分成功,您可以抽奖了");activity.setState(activity.getCanRaffleState());}@Overridepublic boolean raffle() {System.out.println("扣了积分才能抽奖喔!");return false;}@Overridepublic void dispensePrize() {System.out.println("不能发放奖品");}}public class CanRaffleState extends State {RaffleActivity activity;public CanRaffleState(RaffleActivity activity) {this.activity = activity;}/*** 已经扣除了积分,不能再扣*/@Overridepublic void deductMoney() {System.out.println("已经扣取过了积分");}/*** 可以抽奖, 抽完奖后,根据实际情况,改成新的状态** @return boolean*/@Overridepublic boolean raffle() {System.out.println("正在抽奖,请稍等!");Random r = new Random();int num = r.nextInt(10);// 10%中奖机会if (num == 0) {// 改变活动状态为发放奖品 contextactivity.setState(activity.getDispenseState());return true;} else {System.out.println("很遗憾没有抽中奖品!");// 改变状态为不能抽奖activity.setState(activity.getNoRafflleState());return false;}}/*** 不能发放奖品*/@Overridepublic void dispensePrize() {System.out.println("没中奖,不能发放奖品");}
}public class DispenseOutState extends State {RaffleActivity activity;public DispenseOutState(RaffleActivity activity) {this.activity = activity;}@Overridepublic void deductMoney() {System.out.println("奖品发送完了,请下次再参加");}@Overridepublic boolean raffle() {System.out.println("奖品发送完了,请下次再参加");return false;}@Overridepublic void dispensePrize() {System.out.println("奖品发送完了,请下次再参加");}}public class DispenseState extends State {RaffleActivity activity;public DispenseState(RaffleActivity activity) {this.activity = activity;}@Overridepublic void deductMoney() {System.out.println("不能扣除积分");}@Overridepublic boolean raffle() {System.out.println("不能抽奖");return false;}@Overridepublic void dispensePrize() {if (activity.getCount() > 0) {System.out.println("恭喜中奖了");// 改变状态为不能抽奖activity.setState(activity.getNoRafflleState());} else {System.out.println("很遗憾,奖品发送完了");// 改变状态为奖品发送完毕, 后面我们就不可以抽奖activity.setState(activity.getDispensOutState());}}
}// 环境类
public class RaffleActivity {State state;int count;State noRafflleState = new NoRaffleState(this);State canRaffleState = new CanRaffleState(this);State dispenseState = new DispenseState(this);State dispensOutState = new DispenseOutState(this);public RaffleActivity(int count) {this.state = getNoRafflleState();this.count = count;}public void debuctMoney() {state.deductMoney();}public void raffle() {// 如果当前的状态是抽奖成功if (state.raffle()) {//领取奖品state.dispensePrize();}}public State getState() {return state;}public void setState(State state) {this.state = state;}public int getCount() {int curCount = count;count--;return curCount;}public void setCount(int count) {this.count = count;}public State getNoRafflleState() {return noRafflleState;}public void setNoRafflleState(State noRafflleState) {this.noRafflleState = noRafflleState;}public State getCanRaffleState() {return canRaffleState;}public void setCanRaffleState(State canRaffleState) {this.canRaffleState = canRaffleState;}public State getDispenseState() {return dispenseState;}public void setDispenseState(State dispenseState) {this.dispenseState = dispenseState;}public State getDispensOutState() {return dispensOutState;}public void setDispensOutState(State dispensOutState) {this.dispensOutState = dispensOutState;}}public static void main(String[] args) {// 创建活动对象,奖品有1个奖品RaffleActivity activity = new RaffleActivity(1);// 我们连续抽300次奖for (int i = 0; i < 30; i++) {System.out.println("--------第" + (i + 1) + "次抽奖----------");// 参加抽奖,第一步点击扣除积分activity.debuctMoney();// 第二步抽奖activity.raffle();}
}

在这里插入图片描述


http://www.yayakq.cn/news/246868/

相关文章:

  • 寄生虫网站排名代做中英文公司网站
  • 做商城网站要哪些流程只有一个人网站开发
  • 北京企业建设网站制作访问中国建设银行官方网站
  • 四川城乡住房城乡建设厅网站宁波seo关键词排名优化
  • 环保工程网站建设价格电子商务网站建设定位设想
  • 多店铺商城系统开源唐山seo排名外包
  • 超级工程网站建设上海中心大厦全国建筑工程网
  • 哪个网站可以改字体wordpress tag多条件选择
  • 网站丢失了怎么办网站建设需要什么硬件和软件
  • 网站添加ico北京做网站便宜的公司哪家好
  • ae模板免费网站美容院网站源码
  • 网站建设需求材料好的建站网站
  • 邯郸网站制作地方建筑公司网站模板免费下载
  • 上海网站建设 迈若wordpress换模板
  • 电子商务网站网络推广方式金融机构网站建设费用
  • 100个免费网页设计模板整站网站优化费用
  • 吴江设计网站公司网站建设的报告
  • 网站建设分金手指专业十八精准营销推广
  • 黄冈网站建设哪家好如皋市网站建设
  • 长春网站建设4435快速建网站软件
  • 通州区网站快速排名方案怎么制作网页页面
  • 医疗网站备案wordpress 模板调用
  • 怎样做营销型网站推广网站建设证有
  • 织梦网站文章内容模板电脑去哪里建设网站
  • 揭阳有哪家网站制作公司网线制作工具有哪些
  • 二手房网站开发背景个人成立公司怎么做企业网站
  • 免费的网站入口在哪网站开发双语
  • 怎么做网站作业找网站公司企业备案
  • 微信网站模板源码下载ui设计的基本流程图
  • 怎样重装电脑wordpressseo工资一般多少