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

无锡做网站公司有哪些电话网站建设潮州

无锡做网站公司有哪些电话,网站建设潮州,金融外贸是做什么的,互联网营销师考证多少钱什么是状态模式 状态模式是指允许一个对象在其内部状态改变时改变他的行为,对象看起来似乎改变了整个类。     状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状…

什么是状态模式

    状态模式是指允许一个对象在其内部状态改变时改变他的行为,对象看起来似乎改变了整个类。
    状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的行为对客户端是透明的。
    状态模式主要包含以下几个角色:
        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/799490/

相关文章:

  • 桂林旅游网站制作公司wordpress 首页登录
  • 建设网站过水建筑网站建设
  • 有后天管理的网站怎么建设网站开发的背景和意义
  • 服务一流的做网站打开网站访问慢
  • phpcms做汽车网站国外工业产品设计网站
  • 学校门户网站建设必要性电子创意设计网站
  • 推荐几个看黄的网站东莞网站排名优化公司
  • 惠阳有做公司网站的吗鞍山网站制作
  • 南海网站建设多少钱视频网站如何做营销策划
  • 选择做网站销售的优势论文查重网站建设
  • angularjs的网站模板百度做网站的联系人
  • 美容设计网站建设北京建站的
  • linux下做网站网站模板制作与安装教程视频
  • 潍坊网站建设wfyckjdedecms网站地图模板怎么
  • 优购物官方网站直播创意网络营销案例
  • 网页超链接到别的网站404电商网站开发模块
  • 基于工作过程的商务网站建设:网页制作除了 wordpress
  • 营销型网站策划安徽通皖建设工程有限公司网站
  • 上海建设银行网站转账记录查询安阳网站优化
  • 广州的服装网站建设网站开发全程实例
  • 正规免费发布信息网站游戏网站建设需要多少钱
  • 搜索引擎营销的模式有上海做网站优化价格
  • 广州新建站佛山做网站格
  • 网站的建设价格建设网站用英文怎么说
  • 专业网站制作公司采用哪些技术制作网站?建立网站的第一步是建立什么
  • 网站建设好还需要续费吗个人如何申请域名
  • 网站优化怎么学南康区城乡规划建设局网站
  • 做网站如何做视频网页加速器哪个好
  • 微信网站开发用什么语言广告联盟平台
  • 怎样为网站做外链旅游门户网站模板