状态模式

18 阅读1分钟

状态模式

目的

对象有多种不同的行为和属性,为了简化判断。把不同行为和属性作为对象状态

场景

状态模式根据状态把对象切换完全不同的行为,属性,样式等等。

示例代码

<template>
    <div>
        <a v-if="status === 'a'"></a>
        <b v-if="status === 'b'"></b>
        <c v-if="status === 'c'"></c>
    </div>
</template>
<script setup>
import a from "./a.vue"
import b from "./b.vue"
import c from "./c.vue"

const status = ref()
</script>

// 状态模式

<template>
    <div>
        <component :is="stateList[status]"></component>
    </div>
</template>
<script setup>
import a from "./a.vue"
import b from "./b.vue"
import c from "./c.vue"

const status = ref()

const stateList = {
    a,b,c
}
</script>
<template>
    <div>
        <button v-if="query === 'a' || query === 'b'">管理按钮</button>
        <checkbox v-if="query === 'b' || query === 'c'"></checkbox>
        <button v-if="query === 'b'">添加</button>
    </div>
</template>
<script setup>
route = useRoute()
const query = route.query

const status = ref()
</script>

// 状态模式
<template>
    <div>
        <button v-if="statusList[query].managerBtn">管理按钮</button>
        <checkbox v-if="statusList[query].checkbox"></checkbox>
        <button v-if="statusList[query].addBtn">添加</button>
    </div>
</template>
<script setup>
route = useRoute()
const query = route.query
const statusList = {
    a: {
        managerBtn: ture,
        checkbox:false
        addBtn: false
    },
    b: {
        managerBtn: ture,
        checkbox:ture
        addBtn: ture
    },
    c: {
        managerBtn: false,
        checkbox:ture
        addBtn: false
    },
}

const status = ref()
</script>