您的位置:首页 > 编程语言 > Java开发

Java语言设计模式之状态模式(State)

2017-08-25 17:44 661 查看
状态模式:改变对象的行为

一个用来改变类的(状态的)对象。

迹象:几乎所有方法里都出现(相同的)条件(表达式)代码。为了使同一个方法调用可以产生不同的行为,State 模式在代理(surrogate)的生命周期内切换它所对应的实现(implementation)。当你发现,在决定如何实现任何一个方法之前都必须作很多测试的情况下,这是一种优化实现代码的方法。 此外,状态(State)的改变会自动传递到所有用到它的地方,而不需要手工编辑类的方法以使改变生效。

下面的代码演示了 State 模式的基本结构。

代码如下:

StateDemo.java

package com.enfo.wd.patterns;

interface State{
void operation1();
void operation2();
void operation3();
}

class ServiceProvider{
private State state;
public ServiceProvider(State state){
this.state=state;
}
public void changeState(State newState){
state=newState;
}
public void service1(){
state.operation1();
state.operation3();
}
public void service2(){
state.operation1();
state.operation2();
}
public void service3(){
state.operation3();
state.operation2();
}
}
class Implementation implements State{

@Override
public void operation1() {
System.out.println("Implementation.operation1()");
}

@Override
public void operation2() {
System.out.println("Implementation.operation2()");
}

@Override
public void operation3() {
System.out.println("Implementation.operation3()");
}

}

class Implementation1 implements State{

@Override
public void operation1() {
System.out.println("Implementation.operation1()");
}

@Override
public void operation2() {
System.out.println("Implementation.operation2()");
}

@Override
public void operation3() {
System.out.println("Implementation.operation3()");
}

}

public class StateDemo {
static void run(ServiceProvider sp){
sp.service1();
sp.service2();
sp.service3();
}
ServiceProvider sp=new ServiceProvider(new Implementation());
public void test(){
run(sp);
sp.changeState(new Implementation1());
run(sp);
}

public static void main(String[] args) {
StateDemo test1=new StateDemo();
test1.test();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息