结合项目实例 回顾传统设计模式(十)状态模式

简介:

谈到状态模式我们在这里所谈论的是一个通用的技巧:如何对对象内的状态建模----通过创建一个实例变量来持有状态值,并在方法内书写条件代码来处理不同状态。我们要把一个状态的所有行为放在一个类中。这么一来我们将行为局部化了,并使得事情更容易改变和理解。

虫子还是拿订单系统来说事了

 

///   <summary>
    
///  状态接口
    
///   </summary>
     public  interface SimpleState
    {
         // 检查购物车
         void CheckCart();
         // 检查账号
         void CheckAcount();
         // 提交订单
         void OrderSumbit();
    }

     public  class Order
    {
         // 初始状态
        SimpleState initsate;
         // 待审核状态
        SimpleState Pendingsate;
         // 提交后状态
        SimpleState submittedsate;

         public Order()
        {
            initsate =  new InitState( this);
            Pendingsate =  new Pendingsate( this);
            submittedsate =  new submittedsate( this);
        }

         private SimpleState state;

         public  void setState(SimpleState state)
        {
             this.state = state;
        }

         public SimpleState getInitState()
        {
             return initsate;
        }
         public SimpleState getPendingsate()
        {
             return Pendingsate;
        }
         public SimpleState getsubmittedsate()
        {
             return submittedsate;
        }

    }

     public  class InitState : SimpleState
    {
        Order order;
         public InitState(Order order)
        {
             this.order = order;
        }
         public  void CheckCart()
        {
            Console.WriteLine( " 订单进入初始状态 ");
            order.setState(order.getInitState());
        }
         public  void CheckAcount()
        {
            Console.WriteLine( " 订单进入待审核状态 ");
            order.setState(order.getPendingsate());
        }
         public  void OrderSumbit()
        {
            Console.WriteLine( " 该状态不能进入此步骤 ");           
        }

      
    }

     public  class Pendingsate : SimpleState
    {
        Order order;
         public Pendingsate(Order order)
        {
             this.order = order;
        }
         public  void CheckCart()
        {
            Console.WriteLine( " 该状态不能进入此步骤 ");
        }
         public  void CheckAcount()
        {
            Console.WriteLine( " 订单进入待审核状态 ");
            order.setState(order.getPendingsate());
        }
         public  void OrderSumbit()
        {
            Console.WriteLine( " 订单进入提交状态 ");
            order.setState(order.getsubmittedsate());
        }
    }

     public  class submittedsate : SimpleState
    {
        Order order;
         public submittedsate(Order order)
        {
             this.order = order;
        }
         public  void CheckCart()
        {
            Console.WriteLine( " 该状态不能进入此步骤 ");
        }
         public  void CheckAcount()
        {
            Console.WriteLine( " 该状态不能进入此步骤 ");       
        }
         public  void OrderSumbit()
        {
            Console.WriteLine( " 订单进入提交状态 ");
            order.setState(order.getsubmittedsate());
        }
    }

 

总结:状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。因为这个模式将状态封装成独立的类,并将动作委托到代表当前状态的对象,我们知道行为会随着内部状态改变而改变。从客户的视角来看,如果你使用的对象能够完全改变它的行为,那么你会觉得,这个对象实际上市用别的类实例化而来的。然而,实际上,我们是在使用组合通过简单引用不同的状态对象来造成类改变的假象。


本文转自 熬夜的虫子  51CTO博客,原文链接:http://blog.51cto.com/dubing/712417


相关文章
|
3月前
|
设计模式 算法 数据库连接
PHP中的设计模式:提高代码的可维护性与扩展性本文旨在探讨PHP中常见的设计模式及其应用,帮助开发者编写出更加灵活、可维护和易于扩展的代码。通过深入浅出的解释和实例演示,我们将了解如何使用设计模式解决实际开发中的问题,并提升代码质量。
在软件开发过程中,设计模式是一套经过验证的解决方案模板,用于处理常见的软件设计问题。PHP作为流行的服务器端脚本语言,也有其特定的设计模式应用。本文将重点介绍几种PHP中常用的设计模式,包括单例模式、工厂模式和策略模式,并通过实际代码示例展示它们的具体用法。同时,我们还将讨论如何在实际项目中合理选择和应用这些设计模式,以提升代码的可维护性和扩展性。
81 4
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。
|
3月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:如何提高代码的可维护性与扩展性在软件开发领域,PHP 是一种广泛使用的服务器端脚本语言。随着项目规模的扩大和复杂性的增加,保持代码的可维护性和可扩展性变得越来越重要。本文将探讨 PHP 中的设计模式,并通过实例展示如何应用这些模式来提高代码质量。
设计模式是经过验证的解决软件设计问题的方法。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理地使用设计模式可以显著提高代码的可维护性、复用性和扩展性。本文将介绍几种常见的设计模式,包括单例模式、工厂模式和观察者模式,并通过具体的例子展示如何在PHP项目中应用这些模式。
|
3月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
57 2
|
4月前
|
设计模式 存储 前端开发
揭秘.NET架构设计模式:如何构建坚不可摧的系统?掌握这些,让你的项目无懈可击!
【8月更文挑战第28天】在软件开发中,设计模式是解决常见问题的经典方案,助力构建可维护、可扩展的系统。本文探讨了.NET中三种关键架构设计模式:MVC、依赖注入与仓储模式,并提供了示例代码。MVC通过模型、视图和控制器分离关注点;依赖注入则通过外部管理组件依赖提升复用性和可测性;仓储模式则统一数据访问接口,分离数据逻辑与业务逻辑。掌握这些模式有助于开发者优化系统架构,提升软件质量。
63 5
|
3月前
|
设计模式 Java 测试技术
Java设计模式-状态模式(18)
Java设计模式-状态模式(18)
|
4月前
|
设计模式 网络协议 Java
【十五】设计模式~~~行为型模式~~~状态模式(Java)
文章详细介绍了状态模式(State Pattern),这是一种对象行为型模式,用于处理对象在其内部状态改变时的行为变化。文中通过案例分析,如银行账户状态管理和屏幕放大镜工具,展示了状态模式的应用场景和设计方法。文章阐述了状态模式的动机、定义、结构、优点、缺点以及适用情况,并提供了Java代码实现和测试结果。状态模式通过将对象的状态和行为封装在独立的状态类中,提高了系统的可扩展性和可维护性。
【十五】设计模式~~~行为型模式~~~状态模式(Java)
|
4月前
|
设计模式 JavaScript 前端开发
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
|
6月前
|
设计模式 Java
设计模式在Java项目中的实际应用
设计模式在Java项目中的实际应用
|
5月前
|
设计模式 Java 数据库连接
Java中的设计模式在实际项目中的应用
Java中的设计模式在实际项目中的应用