状态模式

很多人不喜欢拍马屁的人,觉得靠拍马屁上位的人很不要脸,你要知道这个世道,脸是最不值钱的东西。

他们一边抱怨领导不关注自己,一边又不屑于使用手段来获得关注。

这些人总想着用自己的能力战胜一切阴谋。

你没有只靠能力战胜阴谋的智商和能力,所以学的圆滑一点吧。

跟你的头学习,头发越来越少,脑瓜越来越滑。

当然了,圆滑也不一定是说成为那种只靠溜须拍马来获得权力的人,最起码我们要学会见人说人话,见鸟说鸟话。

话不多说展示才艺——我们 用一种设计模式来描述一下“见人说人话,见鸟说鸟话”

一、初识状态模式

允许一个对象在其内部状态改变时改变他们的行为。

状态模式属于一种行为模式。

状态模式主要解决的是当控制一个对象状态的条件过于复杂的情况,把状态的判断逻辑转义到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化。

二、类图

拍马屁(状态模式)_状态模式

环境包含状态,环境中状态修改后,状态的表现也就会修改。

Context:环境类 也叫上下文,它定义了客户端需要的接口,内部维护了一个状态,并负责具体状态的切换。

你以把它想象成你所处的真实职场环境。

2 State:抽象状态,定义一个接口,用来约束行为,比如你说话只能用嘴说,你用鼻子说话,那是瞧不起人

ConcreteState:具体的状态,实现抽象状态的行为,这个你可以想成,面对不同的人,有不同的说话语气。

三、示例

见人说人话,见鸟说鸟话

环境类:

package state;

/**
 * @author 木子的昼夜编程
 * 环境类
 */
public class Context {
    State state;
    // 初始化环境的时候 传入状态  这时候根据你自己的判断 看是需要说鸟话 还是人话
    public Context(State s){
        this.state = s;
    }

    // 可以动态设计状态 比如你刚看见一个喜欢拍马屁的领导  过了会儿又看见一个比较正直的领导
    public void setState(State state) {
        this.state = state;
    }

    public State getState() {
        return state;
    }

    // 说话
    public void say(){
        state.say();
    }
}

抽象状态类:

package state;

/**
 * @author 木子的昼夜编程
 * 抽象的状态类 约束行为 只能说话say 不能放屁
 */
public abstract class State {
   // 抽象的说话方法
   public abstract void say();
}

拍马屁领导状态类:

package state;

/**
 * @author 木子的昼夜编程
 * 遇到喜欢拍马屁的领导
 */
public class StateA extends State{

    @Override
    public void say() {
        System.out.println("嘿!领导,早上好,您今天穿的可真帅。是不是公司要让你当CEO啦 ");
    }
}

耿直领导状态类:

package state;

/**
 * @author 木子的昼夜编程
 * 遇到比较耿直的领导
 */
public class StateB extends State{

    @Override
    public void say() {
        System.out.println("领导早!");
    }
}

同事状态类:

package state;

/**
 * @author 木子的昼夜编程
 * 遇到普通同事
 */
public class StateC extends State{

    @Override
    public void say() {
        System.out.println("早,XXX,早上吃的啥,那边有个豆腐脑不错你可以试试~");
    }
}

开始说话:

package state;

/**
 * @author 木子的昼夜编程
 */
public class Test {
    public static void main(String[] args) {
        // 创建环境 默认是遇见同事
        Context context = new Context(new StateC());
        context.say();
        // 遇见喜欢被拍马屁领导
        context.setState(new StateA());
        context.say();
        // 遇见耿直领导
        context.setState(new StateB());
        context.say();

    }

}

拍马屁(状态模式)_C_02

四、聊聊

看似很简单,跟那个模板方法模式有点儿类似,就是设置不同的类,但是他们都有同一个父类,调用父类定义好的方法,子类的表现不一样。