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

    输出结果

    开机啦
    下一个频道
    增加音量
    关机啦
    
  • 相关阅读:
    SQL 左外连接,右外连接,全连接,内连接
    CentOS 7.0默认使用的是firewall作为防火墙
    Python-WEB自动化-三种等待方式
    Python + Selenium的web自动化框架
    BS架构和CS架构的区别
    ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
    CentOS 7镜像下载
    CentOS7各个版本镜像下载地址
    CentOS7的Minimal版本安装
    Python 文字转语音
  • 原文地址:https://www.cnblogs.com/milovetingting/p/12203789.html
Copyright © 2011-2022 走看看