状态模式的使用场景

状态模式的使用场景

    类似于策略模式,都是为了解决多个if…else存在的复杂问题,他的结构图和策略模式的一模一样,但是解决的问题不一样。

    在android中可以用来解决嵌套dialog的显示,比如有一堆弹窗,A,B,C … 他们会按照顺序进行显示,可能我们常做的是先显示一个,用户点击了确定,再判断点击事件显示第二个,以此类推,这样的话嵌套耦合度太高,之后如果增加了新的需求,或者维护代码都容易带来一堆问题

    对应于以下这种多个if else嵌套的判断:

public void m1(){
    if(a){
        m2();// 用户点击确定继续显示dialog m2
    }
}

public void m2(){
    if(b){
        m3();// 用户点击确定继续显示dialog m3
    }
}

public void m3(){
    if(c){
        ...// 类似于m1,m2
    }
}

    对于上述这些一堆嵌套的dialog弹窗。我们可以进行简化,还是每个部分单独成类,他们的共同点是一个执行动作,一个跳转动作。所以可以抽象出一个父类IParent.

abstract class IParent {
    public abstract void doActiont();
    
   void toNext(Fragment fragment){
       fragment.go(getObj());
   }
   
   public abstract getObj();
}

    对于嵌套的弹窗都有一个共同的执行者,那就是在哪里或者是谁需要展示它们。也就是我们需要找出状态的设定者,可以将它们共同展示的页面fragment或者activity作为状态设置者。

public void go(IParent p){
    p.doAction();
}

    这样需要把执行者传入每个实现类中,由执行者去进行对应的动作。当然开始动作也是有执行者执行。

// 开始显示dialog
fragmetn.go(new a());// 传入第一个要显示的对象即可
改造后的代码
class a extend IParent{
    public void doActiont(){
        if(a){
            ... 
            toNext(Fragment fragment);
            ...
        }
    }
    
    public IParent getObj(){
        return new b();// 返回下一个要显示的dialog
    }
}

class b extends IParent{
    // 类似于a
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值