• 状态模式


    个人博客

    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();
    	}
    

    输出结果

    开机啦
    下一个频道
    增加音量
    关机啦
    
  • 相关阅读:
    推荐系统算法总结(转)
    【算法题】求最大子数组之和
    jQuery中的filter和find函数
    获取文件夹大小
    微博140字,英文算半个字,中文算一个字,如何实现?
    Xcode 4 添加 Three20 的方法
    應用程式的設定檔info.plist
    iphone中结束电话后返回自己的应用
    解决问题:The icon file must be 57x57 pixels, in .png format (19014)
    开发中的一些小细节代码分享
  • 原文地址:https://www.cnblogs.com/milovetingting/p/12203789.html
Copyright © 2020-2023  润新知