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

自己设计的网站如何推广区块链的网站怎么做

自己设计的网站如何推广,区块链的网站怎么做,wordpress主题不完整,网站蜘蛛爬行统计系统说明:本文介绍行为型设计模式之一的状态模式 定义 状态模式(State Pattern)也叫作状态机模式(State Machine Pattern),允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类…

说明:本文介绍行为型设计模式之一的状态模式

定义

状态模式(State Pattern)也叫作状态机模式(State Machine Pattern),允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类,属于行为型设计模式。(引自《设计模式就该这样学》P348)

“对象看起来好像修改了它的类”,指对象的状态发生改变后,与之对应的行为也会发生改变(当然,这取决于你的业务逻辑)。


状态模式中类的行为是由状态决定的,在不同的状态下有不同的行为。其意图是让一个对象在其内部改变的时候,行为也随之改变。状态模式的核心是状态与行为绑定,不同的状态对应不同的行为。(引自《设计模式就该这样学》P348)

这段讲的很好。

灯的状态

灯的状态简单来分,只有两种,开的和熄灭的,所以更换灯的状态,代码写出来,很简单,如下:

/*** 灯开关*/
public class Switcher {/*** 灯状态* false:熄灯* true:开灯*/private boolean state = false;/*** 使开灯*/public void switchOn() {state = true;System.out.println("开灯");}/*** 使熄灯*/public void switchOff() {state = false;System.out.println("熄灯");}
}

作为程序员的严谨,需要考虑到灯在开启的时候,再调用开启方法的情况和灯在熄灭的时候,再调用熄灭方法的情况,如下:

/*** 灯开关-Plus*/
public class SwitcherPlus {/*** 灯状态* false:熄灯* true:开灯*/private boolean state = false;public void switchOn() {// 如果是熄灯if (!state) {state = true;System.out.println("开灯");} else {System.out.println("灯已经是开灯状态,无需重复开灯");}}public void switchOff() {// 如果是开灯if (state) {state = false;System.out.println("熄灯");} else {System.out.println("灯已经是熄灭状态,无需重复熄灯");}}
}

代码变得复杂起来了,以上仅是一个对象,两种状态的情况,用if-else还能应付。如果是多个状态,例如交通信号灯,有红黄绿三个状态,绿灯变红灯,红灯变黄灯,黄灯变绿灯,代码如下:

/*** 交通信号灯*/
public class TrafficLight {/*** 信号灯状态,默认红* 红灯转绿灯,绿灯转黄灯,黄灯转红灯*/private String state = "红";/*** 切换到绿灯*/public void switchToGreen() {if ("绿".equals(state)) {System.out.println("已是绿灯,无需切换。。。");} else if ("红".equals(state)) {System.out.println("成功切换到绿灯~~~");} else if ("黄".equals(state)) {System.out.println("黄灯不能切换到绿灯!!!");}}/*** 切换到黄灯*/public void switchToYellow() {if ("绿".equals(state)) {System.out.println("成功切换到黄灯~~~");} else if ("红".equals(state)) {System.out.println("红灯不能切换到黄灯!!!");} else if ("黄".equals(state)) {System.out.println("已是黄灯,无需切换。。。");}}/*** 切换到红灯*/public void switchToRed() {if ("绿".equals(state)) {System.out.println("绿灯不能切换到红灯!!!");} else if ("红".equals(state)) {System.out.println("已是红灯,无需切换。。。");} else if ("黄".equals(state)) {System.out.println("成功切换到红灯~~~");}}
}

多层的if-else,代码显得臃肿,难以维护,后续涉及修改也会频繁改动这个类。

状态模式

使用状态模式,将方法、状态抽出来,如下:

(状态接口,State)

/*** 状态*/
public interface State {/*** 切换到绿灯*/void switchToGreen(TrafficLight trafficLight);/*** 切换到黄灯*/void switchToYellow(TrafficLight trafficLight);/*** 切换到红灯*/void switchToRed(TrafficLight trafficLight);
}

(红灯实现类,Red,注意切换成功后修改状态)

/*** 红灯*/
public class Red implements State {@Overridepublic void switchToGreen(TrafficLight trafficLight) {trafficLight.setState(new Green());System.out.println("成功切换到绿灯~~~");}@Overridepublic void switchToYellow(TrafficLight trafficLight) {System.out.println("红灯不能切换到黄灯!!!");}@Overridepublic void switchToRed(TrafficLight trafficLight) {System.out.println("已是红灯,无需切换。。。");}
}

(绿灯实现类,Green,注意切换成功后修改状态)

/*** 绿灯*/
public class Green implements State {@Overridepublic void switchToGreen(TrafficLight trafficLight) {System.out.println("已是绿灯,无需切换。。。");}@Overridepublic void switchToYellow(TrafficLight trafficLight) {trafficLight.setState(new Yellow());System.out.println("成功切换到黄灯~~~");}@Overridepublic void switchToRed(TrafficLight trafficLight) {System.out.println("绿灯不能切换到红灯!!!");}
}

(黄灯实现类,Yellow,注意切换成功后修改状态)

/*** 黄灯*/
public class Yellow implements State {@Overridepublic void switchToGreen(TrafficLight trafficLight) {System.out.println("黄灯不能切换到绿灯!!!");}@Overridepublic void switchToYellow(TrafficLight trafficLight) {System.out.println("已是黄灯,无需切换。。。");}@Overridepublic void switchToRed(TrafficLight trafficLight) {trafficLight.setState(new Red());System.out.println("成功切换到红灯~~~");}
}

(信号灯类,TrafficLight,只需调用抽象方法即可)

/*** 交通信号灯*/
public class TrafficLight {/*** 默认状态:红灯*/State state = new Red();/*** 设置灯状态*/public void setState(State state) {this.state = state;}/*** 切换到绿灯*/public void switchToGreen() {state.switchToGreen(this);}/*** 切换到黄灯*/public void switchToYellow() {state.switchToYellow(this);}/*** 切换到红灯*/public void switchToRed() {state.switchToRed(this);}
}

(客户端,Client)

public class Client {public static void main(String[] args) {TrafficLight trafficLight = new TrafficLight();trafficLight.switchToGreen();trafficLight.switchToYellow();trafficLight.switchToRed();}
}

执行如下

在这里插入图片描述

看下来,使用状态模式,减少了单个类使用大量if-else分支处理复杂逻辑的代码,使代码便于维护,后续还有其他状态,如粉灯、蓝灯,只需要增加对应的类,对应的抽象方法即可,不需要更改原来的代码。

综合来看,状态模式,将原本的代码(code)层面上的结构化,转为了类(class)层面上的结构化,这也是其他设计模式的大体思想。

使用场景

在《设计模式就该这样学》(P349)这本书中,提到状态模式适用于以下场景:

(1)行为随状态改变而改变的场景;

(2)一个操作中含有庞大的多分支结构,并且这些分支取决于对象的状态;

总结

本文介绍了行为型设计模式中的状态模式,参考《设计模式就该这样学》、《秒懂设计模式》两书,交通信号灯场景是《秒懂设计模式》中的举例。


文章转载自:

http://iR6NS7jA.srbbh.cn
http://3DQImXIq.srbbh.cn
http://BUNh1gbD.srbbh.cn
http://Z7bBIodL.srbbh.cn
http://L0WAb0jW.srbbh.cn
http://1Wc5M1UX.srbbh.cn
http://QBgZ7Roi.srbbh.cn
http://zvSJOLlT.srbbh.cn
http://oI9f3Akj.srbbh.cn
http://YovZ9Y5E.srbbh.cn
http://3GSOOHzz.srbbh.cn
http://7gByLvUP.srbbh.cn
http://xGNUFwYQ.srbbh.cn
http://UvAlMROI.srbbh.cn
http://Q8ghPhCL.srbbh.cn
http://dHVVm1Qg.srbbh.cn
http://Oq98E3rw.srbbh.cn
http://uZ04xX6Z.srbbh.cn
http://fUB0EThk.srbbh.cn
http://c0RVNU10.srbbh.cn
http://ZZ578wnb.srbbh.cn
http://wwsJtE0L.srbbh.cn
http://v4X73Q4q.srbbh.cn
http://hZRcyo8U.srbbh.cn
http://5jdzwE8f.srbbh.cn
http://Eg6lL3GH.srbbh.cn
http://aEBRJPxd.srbbh.cn
http://ZnsINxMB.srbbh.cn
http://A4ch1Crz.srbbh.cn
http://VrtIX2zm.srbbh.cn
http://www.dtcms.com/wzjs/631473.html

相关文章:

  • 永久免费的电销外呼系统seo如何推广网站
  • 网站推广员大连网站建设资讯
  • 慈利网站建设太原编程培训机构
  • 做网站可以赚钱吗?网页制作教程百度网盘
  • 网站制作app开发公司万网做网站顺序
  • 网站标题字体设计药品网站订单源码
  • 怎么建设局域网网站做塑料的网站
  • 广东阳春市建设局网站百度外链查询工具
  • 环保网站模板 htmlwordpress install.php 500
  • 优质网站建设的设计要点wordpress产品页面没有分类选择
  • 做招聘网站做服务器多少钱网站如何添加代码
  • 茂名网站建设优化沈阳网站做
  • 专做高中知识的网站wordpress自己安装了插件吗
  • 方山建站报价萝岗电子商务网站建设
  • 赤峰建网站的电话华东民航机场建设公司网站
  • 汉高建设公司网站片头制作网站
  • 金堂县建设局网站自己建立网站教程
  • 小型深圳网站定制开发顺德手机网站建设
  • 扁平化设计网站建设小红书关键词排名怎么做
  • 出名的网站建设公司网站如果不备案吗
  • 网站地址ip域名查询将网站的字体设计成百分比的形式要怎样定义
  • 团购做的好的网站成都建设企业网站
  • 常宁网站制作wordpress带会员的主题
  • 公司网站内容太原网站优化价格
  • 深圳龙岗做网站公司农业行业网站模板
  • 手机评测网站公众号制作135
  • 如何建立一个网站app做网站的要素
  • 三合一网站建设什么意思抖音代运营计划书
  • 广州 网站开发 骏域可以推广的软件有哪些
  • 深圳网站建设(推荐乐云践新)wordpress主页无法访问