状态设计模式的定义
:当一个对象的内在状态改变时允许改变其行为,这个对象看起来又像是改变了其类。
说的直白一点就是,当对象的某个状态改变了,其方法功能也相应改变不同了。 在一般的开发中某些功能会受状态的影响,某些状态下某些功能是不同。用在减少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(){}) //这时变成发货状态
}
}











网友评论