Android开发状态模式(java)

释放双眼,带上耳机,听听看~!

状态模式定义:

类的行为是基于它的状态改变的。

状态模式的核心:

用于解决系统中复杂对象的状态转换,以及不同状态下行为的封装问题。

状态模式的优点:

1.封装了转换规则。

2.可以方便的增加新的状态。

3.避免了在类中写出复杂的if条件语句块。

状态模式的缺点:

1.增加了类的个数。

状态模式的使用场景:

1.对象的行为随状态的改而改变。

2.替代条件分支语句。

状态模式的角色:

1.抽象状态角色:它可能是一个抽象类或者接口,它抽象出状态的行为。

2.具体状态角色:它实现了抽象状态类的方法,它具体化状态的行为。

3.环境角色:它维护了一个状态对象,它是定义了当前的状态。

状态模式和策略模式的主要区别:

1.状态模式:不同的状态,不同的行为;策略模式:某个具体情况(同一件事),不同的策略,

在我们网购的实例中,我们会经历系统给我们的下单,付款,已发货,送货中,已签收,这五种不同状态提示,我们以这为例。

/**
*抽象的状态角色
* Created by  Administrator
*/
public interface State {
//抽象出状态的行为
public void handle();
}
/**
*具体的状态角色(下单)
* Created by  Administrator
*/
public class PlaceAnOrder implements State {
//具体化状态的行为
@Override
public void handle() {
Log.d("doAction","下单");
}
}
/**
*具体的状态角色(付款)
* Created by  Administrator
*/
public class PayTheOrder implements State {
@Override
public void handle() {
Log.d("doAction","付款");
}
}
/**
*具体的状态角色(发货)
* Created by  Administrator
*/
public class DeliverGoods implements State {
@Override
public void handle() {
Log.d("doAction","发货");
}
}
/**
*环境角色
* Created by  Administrator
*/
public class Context {
//持有状态角色引用
private  State state;
public Context() {
}
//设置状态方式1
public Context(State state) {
this.state = state;
}
//设置状态方式2
public void setState(State state) {
this.state = state;
}
//不同的状态,不同的行为
public void doAciton(){
state.handle();
}
}

客户端调用:

Context context=new Context();
//下单
State placeanOrder=new PlaceAnOrder();
context.setState(placeanOrder);
context.doAciton();
//付款
State paytheOrder=new PayTheOrder();
context.setState(paytheOrder);
context.doAciton();
//发货
State  deliverGoods=new DeliverGoods();
context.setState(deliverGoods);
context.doAciton();

结果:

人已赞赏
Android文章

Android开发模板模式(java)

2021-2-1 15:52:39

Android文章

Android开发备忘录模式(java)

2021-2-1 16:45:25

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索