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

深圳有做网站的吗如何查网站的百度快照

深圳有做网站的吗,如何查网站的百度快照,长春网长春网站设计站建设,简单的网站建设公司对状态模式的理解 一、场景二、不采用状态模式1、代码2、缺点 三、采用状态模式1、代码1.1 状态类1.2 上下文(这里指:媒体播放器)1.3 客户端 2、优点 一、场景 同一个东西(例如:媒体播放器),有一…

对状态模式的理解

    • 一、场景
    • 二、不采用状态模式
      • 1、代码
      • 2、缺点
    • 三、采用状态模式
      • 1、代码
        • 1.1 状态类
        • 1.2 上下文(这里指:媒体播放器)
        • 1.3 客户端
      • 2、优点

一、场景

  • 同一个东西(例如:媒体播放器),有一些操作:暂停、播放、停止。很显然,每执行一种操作,媒体播放器的状态便改变了。

    • 播放 -> 暂停:

      • Media Player is now paused.

      当前是播放状态,点击暂停操作,输出:Media Player is not playing.

    • 暂停 -> 暂停

      • Media Player is not playing.

      当前是暂停状态,点击暂停操作,输出:Media Player is not playing.

    • 虽然是同一种操作,但是,因为媒体播放器处在不同的状态,所以表现不同。

  • 面对这种场景,我们怎么编码呢?

    • 简单粗暴的方式:写if-else或者switch。(详见:二、不采用状态模式)

    • 更好的方式:采用状态模式。(详见:三、采用状态模式)

      • 状态模式是一种行为设计模式, 让我们能在一个对象的内部状态变化时改变其行为。

二、不采用状态模式

1、代码

// 媒体播放器
public class MediaPlayer {private String currentState;public MediaPlayer() {this.currentState = "STOPPED"; // 初始状态为停止}public void play() {if (currentState.equals("STOPPED")) {System.out.println("Media Player is now playing.");currentState = "PLAYING";} else if (currentState.equals("PAUSED")) {System.out.println("Media Player resumed playing.");currentState = "PLAYING";} else {System.out.println("Media Player is already playing.");}}public void pause() {if (currentState.equals("PLAYING")) {System.out.println("Media Player is now paused.");currentState = "PAUSED";} else {System.out.println("Media Player is not playing.");}}public void stop() {System.out.println("Media Player is now stopped.");currentState = "STOPPED";}
}// 客户端
public class Main {public static void main(String[] args) {MediaPlayer mediaPlayer = new MediaPlayer();System.out.println("Initial state: Stopped");mediaPlayer.play(); // Stopped -> PlayingmediaPlayer.pause(); // Playing -> PausedmediaPlayer.play(); // Paused -> PlayingmediaPlayer.stop(); // Playing -> Stopped}
}/*
Initial state: Stopped
Media Player is now playing.
Media Player is now paused.
Media Player resumed playing.
Media Player is now stopped.
*/

2、缺点

  • 由于在设计之初,不一定能想到所有状态,假设一开始只想到了:play、pause、stop。辛辛苦苦写好了上面的代码。这时候,产品经理又提了新需求了,发现又要补2个状态。没办法,上面的play、pause、stop三个方法都要进行修改。改着改着就成屎山了。

三、采用状态模式

1、代码

1.1 状态类
  • 状态模式建议为对象的所有可能状态新建一个类, 每个状态独自实现自身状态下的各个行为。
// 抽象父类
public abstract class MediaPlayerState {protected MediaPlayer mediaPlayer;public MediaPlayerState(MediaPlayer mediaPlayer) {this.mediaPlayer = mediaPlayer;}protected abstract void play();protected abstract void pause();protected abstract void stop();
}// 播放状态
public class MediaPlayerPlayState extends MediaPlayerState {public MediaPlayerPlayState(MediaPlayer mediaPlayer) {super(mediaPlayer);}@Overridepublic void play() {System.out.println("Media Player is already playing.");mediaPlayer.setState(this);}@Overridepublic void pause() {System.out.println("Media Player is now paused.");mediaPlayer.setState(new MediaPlayerPauseState(mediaPlayer));}@Overridepublic void stop() {System.out.println("Media Player is now stopped.");mediaPlayer.setState(new MediaPlayerStopState(mediaPlayer));}
}// 暂停状态
public class MediaPlayerPauseState extends MediaPlayerState {public MediaPlayerPauseState(MediaPlayer mediaPlayer) {super(mediaPlayer);}@Overridepublic void play() {System.out.println("Media Player resumed playing.");mediaPlayer.setState(new MediaPlayerPlayState(mediaPlayer));}@Overridepublic void pause() {System.out.println("Media Player is not playing.");mediaPlayer.setState(this);}@Overridepublic void stop() {System.out.println("Media Player is now stopped.");mediaPlayer.setState(new MediaPlayerStopState(mediaPlayer));}
}// 停止状态
public class MediaPlayerStopState extends MediaPlayerState {public MediaPlayerStopState(MediaPlayer mediaPlayer) {super(mediaPlayer);}@Overridepublic void play() {System.out.println("Media Player is now playing.");mediaPlayer.setState(new MediaPlayerPlayState(mediaPlayer));}@Overridepublic void pause() {System.out.println("Media Player is not playing.");mediaPlayer.setState(new MediaPlayerPauseState(mediaPlayer));}@Overridepublic void stop() {System.out.println("Media Player is now stopped.");mediaPlayer.setState(this);}
}
1.2 上下文(这里指:媒体播放器)
public class MediaPlayer {private MediaPlayerState state;public void setState(MediaPlayerState state) {this.state = state;}public MediaPlayer() {this.state = new MediaPlayerStopState(this);}public void play() {state.play();}public void pause() {state.pause();}public void stop() {state.stop();}
}
1.3 客户端
public class Main {public static void main(String[] args) {MediaPlayer mediaPlayer = new MediaPlayer();System.out.println("Initial state: Stopped");mediaPlayer.play(); // Stopped -> PlayingmediaPlayer.pause(); // Playing -> PausedmediaPlayer.play(); // Paused -> PlayingmediaPlayer.stop(); // Playing -> Stopped}
}/*
Initial state: Stopped
Media Player is now playing.
Media Player is now paused.
Media Player resumed playing.
Media Player is now stopped.
*/

2、优点

  • 每个状态类,只需要关心自己状态下,每种操作应该执行哪些逻辑就好了。
  • 如果新增了状态,那无非就是新增一个类,其他已有的状态类,无非就是新写一个方法。这并不会去修改已有的代码,符合开闭原则。

上面的写法有一个小瑕疵,每个状态类实际上应该是单例模式(详见:对单例模式的饿汉式、懒汉式的思考),而不是每次切换状态的时候新建一个对象。

  • 不同状态下,有些操作是一样的,例如:停止操作。这时候可以采用组合的方式进行复用。将停止操作放到一个类中,例如:MediaPlayerStopHandler。每个方法调用MediaPlayerStopHandler的stop方法()实现停止。

  • 仔细看下状态模式的结构:​

    image

    • 会发现和策略模式的结构很像。但二者有很多不同:

      • (1)策略模式:

        • 1)根据客户端的输入,匹配一种策略。每个策略完全独立,策略A感知不到策略B。
        • 2)策略A和策略B是做同一件事情,仅仅是做法不同。
      • (2)状态模式:

        • 1)每种状态下,会有多种行为。(如果只有一种行为,也不存在状态转换了)
        • 2)状态A和状态B不是完全独立的,状态A执行某个行为后,会从状态A转移到状态B。

http://www.dtcms.com/wzjs/548073.html

相关文章:

  • 教做月嫂的网站有吗天津seo选天津旗舰科技a
  • 单页网站对攻击的好处网站根目录相对路径
  • 地方门户网站还能做吗域名网站查询
  • 岳阳网站平台设计手机wap网站模板下载
  • 太原建设工程信息网站母婴网站模板
  • 淘宝网站做推广收费吗dede网站首页
  • 网站新闻怎么写重庆如何快速制作一个网站
  • 简述网站的四种常见结构c 网站开发技术
  • 山东建设住建厅网站微信小商店分销系统
  • 网站备案背景网站开发网站说明怎么写
  • 企业做网站公司有哪些南昌网站建设模板总部
  • 南京建设交易中心网站北京网站设计权威乐云践新
  • 站内优化怎么做我想给别人做网站
  • 金融 网站建设南昌网站建设方案维护
  • 伊川网站开发南山商城网站建设哪家便宜
  • 网站首页结构图建在线教育网站需要多少钱
  • 个人备案 什么网站茌平网站建设菜谱制作
  • 建com网站近年网络营销成功案例
  • 音乐网站建设报告网站自助授权系统
  • 局网站建设管理制度文化馆为何需要建设自己的网站
  • 免费网站模板库怎么做钓鱼网站生成器
  • 网站怎么做移动适配山东平台网站建设平台
  • 上海网站设计培训班网页游戏网站链接
  • 鞋网站建设方案wordpress公共函数在哪
  • 免费中文网站模板下载wordpress 目录权限管理
  • 建个小型网站服务器网站设计的工具
  • 想自己做网站怎么做实名制认证网站
  • 网站建设兼职做篮球网站用的背景图片
  • 怎么做推广赚钱百度关键词快速优化
  • 最好网站建设制作是那个广州外贸建网站