设计模式

设计模式-状态模式

2020-05-25  本文已影响0人  isLJli

状态设计模式的定义

:当一个对象的内在状态改变时允许改变其行为,这个对象看起来又像是改变了其类。
说的直白一点就是,当对象的某个状态改变了,其方法功能也相应改变不同了。 在一般的开发中某些功能会受状态的影响,某些状态下某些功能是不同。用在减少if_else的层级上。

状态设计模式举例

商城中,可以查看一件物品的状态,一个是付款的状态(未付款,已付款),一个是发货的状态(未发货,已发货)。其的状态会动态改变。

//订单的操作
interface OrderOperateStatus {

  //支付
  fun pay(){

  }

  //发货
  fun deliverGoods(){

  }

}
//待付款
open class ObligationStatus:OrderOperateStatus {

  override fun pay() {
      println("付款成功")
  }

  override fun deliverGoods() {
      println("没付款,不能发货")
  }

}
//待收货
open class WaitReceingStatus: OrderOperateStatus {

  override fun pay() {
      println("已经支付了")
  }

  override fun deliverGoods() {
      println("已经发货")
  }

}

改变不同的功能

abstract class BaseOrder {

  var mStatus:OrderOperateStatus?=null

  fun setStatus(status: OrderOperateStatus){
      this.mStatus = status
  }

}
class Order:BaseOrder(),OrderOperateStatus{

  init {
   mStatus = ObligationStatus()
  }
  //付款
  override fun pay(){
      mStatus?.pay()
      //以支付状态
      setStatus(object : PaidStatus(){}) //这时变成支付成功状态
  }

  //发货
  override fun deliverGoods(){
     mStatus?.deliverGoods()
      //待发货状态
      setStatus(object : WaitReceingStatus(){}) //这时变成发货状态
  }
}
上一篇 下一篇

猜你喜欢

热点阅读