如果大家对文章内容有不理解的地方,尽情留言或QQ(1357208561) 讨论。让大家共同进步。
呵呵,标题显得有点大额。最近老转载别人的文章,觉得自己也该拿出点原创的来才行。我在公司近期的项目中,有用到state pattern的,上网google了下,发现大多数文章介绍的都不算太清楚,所以这里谈下本人的理解,通俗易懂。
State pattern 又叫状态模式。为什么会出现这样一种设计模式呢???下面我给你一一道来。项目中有这种需求:一个出差申请(以btripApplication对象定义),要经过多个审批人(approver)审批通过,该出差申请才能通过,并且在每个审批人处理时会执行多种操作(同意,拒绝等),该btripApplication的状态(status)都会有所变化。初步设计如下:
Service层:
创建btripServiceImpl.java,其中还有的方法大致有:
public void approve(BtripApplication btripapplication){}同意该申请
public void reject(BtripApplication btripapplication){}拒绝该申请
public void cancle(BtripApplication btripapplication){}取消该申请
…………
每个approver approve时,都会调用approve()方法。在该方法里大致的处理为:更改btripApplication状态(不同的approver处理其状态会不一样,并且其逻辑会有点复杂),发送邮件等等。同理approver进行其他操作时,设计到btrpApplication的状态改变时都会在相应的方法里处理。 也许你会说这样也没什么的。但是在实际的项目中,一个approver approve时,要处理的事情很多很多,而且会随着当前系统登录角色的不同,其处理也将不同。如果要坚持在每个approver调用的方法里,处理btripApplication状态改变的逻辑,其程序间的耦合性将增加(在很多方法里都有状态改变的逻辑),我们要尽量 降低程序间的耦合性,而不是相互依赖。为此才引入了设计模式。一个btripApplication的状态图为:(大概)
其中方框为btripApplication状态,引出的线条为该状态时可以做出的操作。
((图片在附件中))
以面向对象思绪去看该图,可以把btripApplication的每一个status看作一个类(如:diraftStatus.java),该类具有一些行为(如:doCancle(),doApprov()).具体调用该类的某些行为,可以为该类传入一些事件。并可以为每个status类创建一个共用接口(接口在于设计和应用变得简单)。 这样就可以把btripApplication status改变时做 的大部分逻辑,放到这些状态类里实现呢。大大降低了程序间的耦合性。
举个简单例子,在实际应用中可以对这些类进行可充。
Public interface btripApplicationState
{
Public void execute(int event);
}
Public void DraftStatus implements btripApplicationState {
Public void execute(int event){
Switch(event){
Case BtripApplicationsEvent.APPROVE:
doApprove();
breaik;
case BtripApplicationsEvent.Cancle:
doReject();
break;
}
}
Public void doApprove(){
………………
}
Public void doReject(){
…………………….
}
}
- 描述: btripApplication status picture
- 大小: 6.7 KB
分享到:
相关推荐
《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...
状态模式是一种行为设计模式,它使你能在运行时改变对象的行为。在状态模式中,一个对象的状态变化会导致其行为的变化,这种变化不是通过改变对象的类来实现的,而是通过改变对象的状态。这个模式的核心是封装可能...
创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder ...设计模式之State 设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor
章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立...10、设计模式之State 11、设计模式之Facade(外观) 12、设计模式之Interpreter(解释器) 13、设计模式之Visitor
Java设计模式是软件工程中的一种最佳实践,它总结了在特定场景下解决常见问题的经验,为程序员提供了可重用的解决方案。本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与...
Java 设计模式之 State 模式详解 State 模式是 Java 设计模式的一种,用于解决状态切换问题。当对象的状态改变时,对象的行为也随之改变。State 模式将状态和行为分离,实现了状态切换的灵活性和可扩展性。 定义:...
Java 设计模式之 State 模式 State 模式是一种行为型设计模式,它允许对象在其内部状态改变时改变其行为。该模式的主要思想是将对象的状态和行为分离,使用不同的状态子类来实现不同的行为。 何时使用 State 模式...
《Java设计模式》是刘伟教授的一本关于设计模式的教材,主要面向高等学校的学生和对Java编程有深入兴趣的开发者。设计模式是软件工程中的一种重要思想,它封装了在特定场景下的问题解决方案,可以提高代码的可读性、...
在《Java设计模式》这本书的模拟试题及其参考答案中,涉及了多条设计模式的知识点,以及它们的应用场景和实现方法。现在将这些知识点详细地解释如下: 1. 开闭原则(Open-Closed Principle, OCP): 开闭原则是面向...
### 状态模式(State Pattern) #### 概念与定义 状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变其行为,使对象看起来像是修改了它的类。该模式通过引入一个代表各种状态的类以及一个行为随着这些...
### Java设计模式(第二版)中文版 #### 思维框架的培养;对新手与码农均适用 在软件开发领域,设计模式是一种被广泛采用的解决方案,它可以帮助开发者更好地组织代码、解决常见问题,并提高软件的整体质量和可维护...
在这个名为"JAVA design pattern-java设计模式"的CHM文件中,我们可能找到了关于如何在Java开发中应用设计模式的详细信息。 设计模式通常分为三大类:创建型、结构型和行为型。创建型模式关注对象的创建,如单例...
" JAVA 设计模式概述" JAVA 设计模式是指在软件设计过程中,为了提高代码的可维护性、灵活性和可扩展性所使用的一些惯用解决方案。JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建...
本资料包“JAVA 23种设计模式(全).Design Pattern_Java模式”涵盖了所有23种经典的GOF(GoF,Gang of Four)设计模式,旨在帮助开发者深入理解和应用这些模式。 首先,我们来看一下23种设计模式的分类: 1. **创建...
Java设计模式是软件开发中的一种最佳实践,它总结了在解决特定问题时程序员们经常采用的有效方法。这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的...
代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法...模式(State Pattern)、原型模式(Prototype Pattern)、中介者模式(Mediator Pattern)、解释器模式(Interpreter Pattern)、享元模式...
状态模式-State Pattern状态模式-State Pattern【学习难度:,使用频率:】状态模式-State Pattern处理对象的多种状态及其相互
根据提供的文档信息,我们可以从这份《Java设计模式》模拟试题参考答案及评分标准中提炼出以下关键知识点: ### 一、基础知识与概念 #### 1. 设计模式基础概念 - **里氏替换原则**(Liskov Substitution Principle...
这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...