e学编程之《设计模式》篇-状态模式

本文深入探讨了设计模式中的状态模式,通过实例讲解如何在编程中有效地使用该模式来管理对象的行为和状态变化,提升代码的灵活性和可维护性。
摘要由CSDN通过智能技术生成
前言:相信不少朋友在学习设计模式时,都会感觉很困难,看着经典的教材,却味同嚼蜡,里面的术语、各种抽象概念让你感到迷茫,举步维艰,以至于放弃设计模式的学习。e学编程之《设计模式》篇为系列教程,根据笔者的学习、研究和开发经验撰写而成,旨在以通俗、易懂、生动的语言来讲解设计模式,并在讲解的过程中贯穿大量的实例,让初学设计模式的朋友拨云见日,从此觉得设计模式不再抽象,不再难学!笔者假设你已经具备了面向对象编程的基础知识,除些之外,对于理解本文其它的额外知识都不是必需的。鉴于笔者的水平有限,讲解的过程上可能会有一些错误和不足,也希望各位高手和老师批评指正,共同进步。

 
    本文为大家讲解设计模式之状态模式。  
一、 为什么要用状态模式?

在一个软件中,某些对象往往不止有一种状态,例如在腾讯QQ中,一个用户有在线、隐身、忙碌等状态;在一个画图工具中,画笔可能有正方形、圆形和三角形等状态。

当这些对象处于不同的状态时,同一个操作有着不同的行为。以上述的的画图工具为例,当画笔处于正方形状态时,执行“画元素”这个操作,系统将会在画板上画一个正方形;而当画笔处于圆形状态时,执行“画元素”这个操作,系统所做的行为是在画板上画一个圆形。

当我们不使用状态模式时,如何处理上述这种情况呢?最简单的方法就是用多分支的条件语句,判断当前的画笔是正方形、圆形还是三角形状态,为每种情况编写不同的“画元素”函数。但是这样做并不“好”,体现在下面几个方面:

1) 使得系统的可扩展性和可维护性大大下降。当我们需要为我们系统中的某个元素增加新的状态时,我们要修改若干我们已有的代码,这样就使得系统的可扩展性和可维护性大大下降。继续以上述的画图工具为例,现在又需要增加菱形这种状态,那么此时我们就要在我们现有的代码中增加一个新的用数值定义的内部状态,然后在我们现有的条件分支中增加一个新的分支和操作。

2)使得代码中遍布看起来很相似的条件语句或case语句,代码非常庸肿冗余。上述的画图工具中画笔有三种状态,条件语句至少有三个分支或者三个case。

3) 其状态仅表现为对一些变量的赋值,这不够明确。如果用0、1、3三个整型变量分别表示正方形、圆形和三角形三种状态,当我们当前的状态是正方形时,就给表示状态的数值型变量赋值为0,圆形和三角形类似。这样状态的表现不明确,代码的可读性和可理解性大大下降,容易引入各类错误和问题。

那们我们如何写出重用性、可读性、可理解性、可拓展性和可维护性更强的代码呢?这时我们就有必要使用状态模式来重构我们的代码。

二、什么是状态模式?

状态模式(State Pattern)允许一个对象在其内容状态改变时改变它的行为,对象看起来似乎修改了它的类[1]。
   笔者讲到上面这句话时,你可能已经感到很迷茫。别着急,这句话是从经典教材是摘录下来的,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值