设计模式学习笔记--状态(State)模式


写在模式学习之前


       什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式;每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案;当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式。

       设计模式就是抽象出来的东西,它不是学出来的,是用出来的;或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以“模式专家”的角度来看,都是最佳的设计,不得不说是“最佳的模式实践”,这是因为你积累了很多的实践经验,知道“在什么场合代码应该怎么写”,这本身就是设计模式。

       有人说:“水平没到,学也白学,水平到了,无师自通”。诚然,模式背熟,依然可能写不出好代码,更别说设计出好框架;OOP理解及实践经验到达一定水平,同时也意味着总结了很多好的设计经验,但"无师自通",却也未必尽然,或者可以说,恰恰是在水平和经验的基础上,到了该系统的学习一下“模式”的时候了,学习一下专家总结的结果,印证一下自己的不足,对于提高水平还是很有帮助的。

       本系列的设计模式学习笔记,实际是对于《Java与模式》这本书的学习记录。


状态模式的定义


状态模式,允许一个对象在其内部状态改变的时候改变其行为。

状态模式,把所研究对象的行为包装在不同的状态对象中,每一个状态对象都属于一个抽象状态类的一个子类。

状态模式和策略模式容易混淆。策略模式,是对一种业务场景,多种算法的实现,比如促销 --》多买多折促销、满减促销;状态模式,是对一种业务场景,多种状态的封装。

区别策略模式和状态模式的方法:

(1)考察环境角色是否有明显的状态和状态的过度;

(2)策略模式的环境类自己选择一个具体策略类;状态模式的环境类是被外在原因放在一个具体状态中;

(3)策略模式的策略往往并不明显告诉客户端他所选择的具体策略;而状态模式则相反,环境角色所处的状态是明显告诉客户端的。


状态模式的结构


状态模式的结构和策略模式的结构是一样的,只是结构所代表的内涵不同,一个是基于对一种场景多种策略的继承,一个是对一种策略的多种状态进行封装的继承。


结构图




所涉及的角色


(1)抽象状态(State)角色:定义一个接口,用以封装环境(Context)对象的一个特定状态所对应的行为;

(2)具体状态(ConcreteState)角色:每一个具体状态类,都实现了环境(Context)的一个状态所对应的行为;

(3)环境(Context)角色:定义客户端感兴趣的接口,并且保留一个具体状态类的实例。这个具体状态类的实例给出环境对象的现有状态。


代码实现


public class StateTest {
	public static void main(String[] args)
	{
		Context c = new Context();
		c.setState(new ConcreteState());
		c.sampleOperation();
	}
}

class Context{
	private State state;
	public void setState(State state)
	{
		this.state=state;
	}
	public void sampleOperation()
	{
		state.sampleOperation();
	}
}

interface State {
	void sampleOperation();
}

class ConcreteState implements State{

	@Override
	public void sampleOperation() {
		System.out.println("ok");
	}
	
}

状态模式的示例性代码,和策略模式也是一样的。


状态模式的适用场景


(1)对象的行为,依赖于其所处的状态,随着状态变化,行为也变化;

(2)在条件判断语言中,有大量的代码,这个时候就可以把代码转移到具体状态类中。


对于状态模式的一些应用场景:TCP协议的实现、用户登录中对于多种状态的判断。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《Python学习笔记》是由皮大庆编写的一本关于Python语言学习的教材。在这本书中,作者详细介绍了Python语言的基础知识、语法规则以及常用的编程技巧。 首先,作者简要介绍了Python语言的特点和优势。他提到,Python是一种易于学习和使用的编程语言,受到了广大程序员的喜爱。Python具有简洁、清晰的语法结构,使得代码可读性极高,同时也提供了丰富的库和模块,能够快速实现各种功能。 接着,作者详细讲解了Python的基本语法。他从变量、数据类型、运算符等基础知识开始,逐步介绍了条件语句、循环控制、函数、模块等高级概念。同时,作者通过大量的示例代码和实践案例,帮助读者加深对Python编程的理解和应用。 在书中,作者还特别强调了编写规范和良好的编程习惯。他从命名规范、注释风格、代码缩进等方面指导读者如何写出清晰、可读性强的Python代码。作者认为,良好的编程习惯对于提高代码质量和提高工作效率非常重要。 此外,作者还介绍了Python的常用库和模块。他提到了一些常用的库,如Numpy、Pandas、Matplotlib等。这些库在数据处理、科学计算、可视化等领域有广泛的应用,帮助读者更好地解决实际问题。 总的来说,《Python学习笔记》是一本非常实用和全面的Python学习教材。通过学习这本书,读者可以系统地学习和掌握Python编程的基础知识和高级应用技巧,为以后的编程学习和工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值