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

杨浦区建设小学网站首页seo网站内部优化

杨浦区建设小学网站首页,seo网站内部优化,axure 做网站原型,全屏自适应网站模板什么是状态模式 状态模式是指允许一个对象在其内部状态改变时改变他的行为,对象看起来似乎改变了整个类。     状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状…

什么是状态模式

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

相关文章:

  • 做网站使用明星照片可以吗郑州网站建设方案
  • 郑州哪里可以做网站今日热点新闻2022
  • 亚马逊店铺出售网站百度seo排名软
  • 天津做网站开发的肇庆网站搜索排名
  • 微商营销优化关键词排名外包
  • 哪个网站做设计兼职不用压金搜索引擎推广seo
  • 重庆教育建设集团有限公司官方网站宣传推广图片
  • 设计师联盟网站公司网站制作需要多少钱
  • 黄山购物网站建设百度人工投诉电话是多少
  • 外包app开发价格表seo 视频
  • 网站建设意义制作网站需要的技术与软件
  • 企业为什么做网站系统创建网站的流程是什么
  • 淘宝客做的最好的网站百度投诉中心电话
  • 网站打开速度太慢网址之家
  • 家庭网络搭建网站最好的网络推广方式
  • 网站如何做直播轮播深圳百度百科
  • 400网站建设电话国外服务器免费ip地址
  • 做音频的网站app推广软件
  • 2017政府网站设计方案最近的国际新闻大事10条
  • 网站网页转app源码百度怎么推广广告
  • 龙岗做网站多少钱付费推广方式有哪些
  • 上海 高端网站建设合肥网站推广电话
  • 微信上登录网站同步怎么做西安seo管理
  • 阿里云ecs建站东莞搜索引擎推广
  • 网站开发资金投入如何做个人网站
  • 简约网站建设武汉seo搜索引擎
  • 房屋中介网站模板软文写作的三个要素
  • 网站源码使用中国局势最新消息今天
  • 做网站每年交服务费网站创建的流程是什么
  • 个人建设纪检网站企业网站建站模板