zoukankan      html  css  js  c++  java
  • js设计模式 -- 状态机

    /*****************************抽象类***************************/
    var State = function() {};
    State.prototype.pressButton = function() {
    	throw new Error('pressButton方法必须重写');
    };
    /*****************************状态类***************************/
    //关灯状态
    var OffState = function(light) {
    	this.light = light;
    };
    OffState.prototype = new State(); //继承父类
    //覆盖父类方法
    OffState.prototype.pressButton = function() {
    	console.log('弱光');
    	this.light.setState(this.light.weak);
    };
    // 弱光状态
    var WeakState = function(light) {
    	this.light = light;
    };
    WeakState.prototype = new State(); //继承父类
    // 覆盖父类方法
    WeakState.prototype.pressButton = function() {
    	console.log('强光');
    	this.light.setState(this.light.strong);
    };
    // 强光状态
    var StrongState = function(light) {
    	this.light = light;
    };
    StrongState.prototype = new State(); //继承父类
    // 覆盖父类方法
    StrongState.prototype.pressButton = function() {
    	console.log('关灯');
    	this.light.setState(this.light.off);
    };
    
    //******************灯类********************//
    var Light = function() {
    	this.off = new OffState(this);
    	this.weak = new WeakState(this);
    	this.strong = new StrongState(this);
    	this.button = null;
    };
    Light.prototype.init = function() {
    	var button = document.createElement('button');
    	var _self = this;
    	this.button = document.body.appendChild(button);
    	this.button.innerHTML = '三种状态开关';
    	this.currentState = this.off; //设置当前状态为关闭状态
    	this.button.onclick = function() {
    		_self.currentState.pressButton();
    	};
    };
    Light.prototype.setState = function(newState) {
    	this.currentState = newState;
    };
    
  • 相关阅读:
    Newbit 启用淘宝店域名
    Ninja构建系统入门
    异想家Golang学习笔记
    Webpack学习
    JavaFx图形界面开发
    异想家Win10常用的软件推荐
    Java Swing图形界面开发
    优雅写Java之四(类与对象)
    优雅写Java之三(IO与文本解析)
    优雅写Java之二(数组集合流)
  • 原文地址:https://www.cnblogs.com/smss/p/7357873.html
Copyright © 2011-2022 走看看