如果大家对文章内容有不理解的地方,尽情留言或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
分享到:
相关推荐
状态模式(State Pattern) 空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4 J2EE 模式 这些设计模式特别关注表示层。这些模式是由...
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。
创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder ...设计模式之State 设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor
章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立...10、设计模式之State 11、设计模式之Facade(外观) 12、设计模式之Interpreter(解释器) 13、设计模式之Visitor
在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
试谈java设计模式之State.doc
用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...
状态模式-State Pattern状态模式-State Pattern【学习难度:,使用频率:】状态模式-State Pattern处理对象的多种状态及其相互
这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...
Head First 设计模式 (十) 状态模式(State pattern) C++实现
《java设计模式(第2版)》通过一个完整的java项目对经典著作design patterns一书介绍的23种设计模式进行了深入分析与讲解,实践性强,却又不失对模式本质的探讨。本书创造性地将这些模式分为5大类别,以充分展现各个...
180 Java 设计模式及应用案例(第 2 版) public CellContext2(String strPhone, String name, float price){ this.strPhone = strPhone; this.name = name; this.price = price; } public int getMark(){ int mark ...
基于state pattern实现的xml解释器
Java设计模式,关于状态机。Java设计模式,关于状态机。Java设计模式,关于状态机。Java设计模式,关于状态机。Java设计模式,关于状态机。
。。。
。。。
。
。
实现对象的复用——享元模式(二) 实现对象的复用——享元模式(三) 实现对象的复用——享元模式(四) 实现对象的复用——享元模式(五) 代理模式-Proxy Pattern 设计模式之代理模式(一) 设计模式之代理模式...
主要介绍了Java设计模式之状态模式(State模式)介绍,本文讲解了何时使用状态模式、如何使用状态模式等内容,需要的朋友可以参考下