zoukankan      html  css  js  c++  java
  • 状态模式

    个人博客

    http://www.milovetingting.cn

    状态模式

    模式介绍

    状态模式中的行为是由状态来决定的,不同状态下有不同的行为。

    模式定义

    当一个对象的内在状态改变时允许其改变行为。

    使用场景

    1. 一个对象的行为取决于它的状态,并且它必须在运行时根据状态来改变行为。

    2. 代码中包含大量与对象状态有关的条件语句。

    简单使用

    定义状态接口

    public interface TvState {
    	public void nextChannel();
    	public void prevChannel();
    	public void turnUp();
    	public void turnDown();
    }
    

    定义实现类

    public class PowerOnState implements TvState {
    
    	@Override
    	public void nextChannel() {
    		System.out.println("下一个频道");
    	}
    
    	@Override
    	public void prevChannel() {
    		System.out.println("上一个频道");
    	}
    
    	@Override
    	public void turnUp() {
    		System.out.println("增加音量");
    	}
    
    	@Override
    	public void turnDown() {
    		System.out.println("减小音量");
    	}
    
    }
    
    public class PowerOffState implements TvState{
    
    	@Override
    	public void nextChannel() {
    		
    	}
    
    	@Override
    	public void prevChannel() {
    		
    	}
    
    	@Override
    	public void turnUp() {
    		
    	}
    
    	@Override
    	public void turnDown() {
    		
    	}
    
    }
    

    定义控制类接口

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

    定义控制类的实现类

    public class TvController implements PowerController {
    
    	private TvState mTvState;
    
    	private void setTvState(TvState tvState) {
    		mTvState = tvState;
    	}
    
    	@Override
    	public void powerOn() {
    		setTvState(new PowerOnState());
    		System.out.println("开机啦");
    	}
    
    	@Override
    	public void powerOff() {
    		setTvState(new PowerOffState());
    		System.out.println("关机啦");
    	}
    
    	public void nextChannel() {
    		mTvState.nextChannel();
    	}
    
    	public void prevChannel() {
    		mTvState.prevChannel();
    	}
    
    	public void turnUp() {
    		mTvState.turnUp();
    	}
    
    	public void turnDown() {
    		mTvState.turnDown();
    	}
    
    }
    

    调用

    public static void main(String[] args) {
    		TvController tvController = new TvController();
    		tvController.powerOn();
    		tvController.nextChannel();
    		tvController.turnUp();
    		tvController.powerOff();
    		tvController.turnDown();
    	}
    

    输出结果

    开机啦
    下一个频道
    增加音量
    关机啦
    
  • 相关阅读:
    python字典及其内置函数详解
    python函数语法学习
    python切片、迭代、生成器、列表生成式等高级特性学习
    Python入门及安装
    node中的加密模块 crypto
    Nodejs+MongoDB+Bootstrap+esj搭建的个人简易博客
    JavaScript的深拷贝和浅拷贝总结
    redux 学习总结
    简述redux(1)
    通信数据转发程序:代理、网关、隧道
  • 原文地址:https://www.cnblogs.com/milovetingting/p/12203789.html
Copyright © 2011-2022 走看看