还为那些设计模式烦恼吗-状态模式

定义

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类

public interface TvState {
    public void next();
    public void pre();
    public void up();
    public void down();
}
package com.qc.state;

public class PowerOffState implements TvState {

    @Override
    public void next() {
        // TODO Auto-generated method stub

    }

    @Override
    public void pre() {
        // TODO Auto-generated method stub

    }

    @Override
    public void up() {
        // TODO Auto-generated method stub

    }

    @Override
    public void down() {
        // TODO Auto-generated method stub

    }

}

package com.qc.state;

public class PowerOnState implements TvState {

    @Override
    public void next() {
        // TODO Auto-generated method stub
        System.out.println("下一首");
    }

    @Override
    public void pre() {
        // TODO Auto-generated method stub
        System.out.println("上一首");
    }

    @Override
    public void up() {
        // TODO Auto-generated method stub
        System.out.println("上");
    }

    @Override
    public void down() {
        // TODO Auto-generated method stub
        System.out.println("下");
    }

}
package com.qc.state;

public interface PowerController {
    public void powerOn();
    public void powerOff();
}

package com.qc.state;

public class Tv implements PowerController {
    TvState mTvState;

    @Override
    public void powerOn() {
        // TODO Auto-generated method stub
        setTvState(new PowerOnState());
    }

    @Override
    public void powerOff() {
        // TODO Auto-generated method stub
        setTvState(new PowerOffState());
    }

    public void setTvState(TvState mTvState) {
        this.mTvState = mTvState;
    }

    public void next() {
        mTvState.next();
    }

    public void pre() {
        mTvState.pre();
    }

    public void up() {
        mTvState.up();
    }

    public void down() {
        mTvState.down();
    }

}

package com.qc.state;

public class Client {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Tv mTv = new Tv();
        mTv.powerOn();
        mTv.next();
        mTv.pre();
        mTv.up();
        mTv.down();
    }

}

使用

1、一个对象的行为取决于它的状态。并且它必须在运行时根据状态改变它的行为。
2、代码中包含大量与对象状态有关的条件语句,例如,一个操作中含有庞大的多分支语句(if-else或switch-case),且这些分支依赖于该对象的状态。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,714评论 0 13
  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 9,835评论 1 44
  • [The Swift Programming Language 中文版]本页包含内容: Swift提供了多种流程控...
    风林山火阅读 3,744评论 0 0
  • 文/金刚葫芦妈 最近一个很火的视频,一个萌萌哒小男孩,大人问,“你长大了想成为什么样的人啊?”他回答我想成为爸爸。...
    兰菲阅读 3,388评论 8 5
  • 我今天被清了,你也清清吧。不用回,试试吧,复制我发的信息,找到微信里的设置,通用,群发助手,全选,粘贴复制的信息发...
    长弓心悦阅读 2,532评论 0 2

友情链接更多精彩内容