zoukankan      html  css  js  c++  java
  • 《设计模式》笔记:状态模式

        _________________________基本概念,copy from 百度百科______________________

    状态模式(State Pattern)是设计模式的一种,属于行为模式。

    定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
    状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。 把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化
    意图:允许一个对象在其内部状态改变时改变它的行为
    适用场景:
    1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
    2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
    __________________________UML图_______________________________________
     
    个人理解,两个关键点:
    1)Context把任务委托给当前的ConcreteState;
    2)state模式中的各种具体的state类中的operation方法在处理Context的请求时,还要设置好Context的后继state。逻辑判断被分割到一个个具体的类中,减少了相互间的耦合性。
    3)具体状态类多采用单件模式来实现。
     
    __________________________实践________________________________________
    《设计模式》一书中提高的TCP状态类的例子:
    一个ConcreteState类,TCPlisten的单件模式实现
    #include "Tcpstate.h"
    class TcpListen :
    	public TcpState
    {
    public:
    	static TcpState *Instance();
    	virtual void send(TcpConnection*);
    private:
    	static TcpState* _instance;
    };
    
    
    TcpState *TcpListen::_instance=0;
    
    void TcpListen::send(TcpConnection *t){
    	printf("Server send SYN,receive SYN,ACK,etc\n");
    	changeState(t,TcpEstablished::Instance());
    }
    
    TcpState *TcpListen::Instance(){
    	printf("In TCPLISTEN state\n");
    	if(TcpListen::_instance==0){
    		_instance=new TcpListen;
    	}
    	return _instance;
    }

     
     
     
  • 相关阅读:
    ASP.NET页面打印技术的总结
    js传递中文参数的url到asp(jscript)解释得到的中文参数为乱码的解决方法
    header的用法(PHP)
    oracle 11g road(/dev/shm需注意)
    mysql 主从同步 Error 'Out of range value for column的问题
    linux shell 过滤特殊字符开始的行
    Oracle穿越incarnation恢复数据
    多普达A6388刷机2.3
    【忽悠普通人用】隐藏文件夹的方法
    电脑同时使用双网卡实现方法
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3122886.html
Copyright © 2011-2022 走看看