23种设计模式-模板方法模式《面试流程》

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39923324/article/details/82143763

对于许久不用的东西,容易忘记。百度许久,也未能找到自己所要。 从今日起,有些东西就记载下来,不仅方便自己,希望能帮到他人吧!

定义:
一个操作中的算法骨架,而将一些步骤延迟到子类中。通俗点将就是将不同点放在子类实现,当然也可以通过钩子在子类修改父类。

《面试流程》公司方

某家公司招Android开发程序员。

1.出招聘广告
2.做题
3.面试
4.公司讨论

代码描述:

package com.example.yancy.model.TemplateMethod;

import android.util.Log;

/**
 * 创建日期:2018/8/28 0028 on 9:52
 * 描述:模板方法,面试的流程
 * 作者: yancy
 */
public abstract class Abstract {
    public static final String TAG = "yancy";

    /**
     * 所有面試者看到的招聘廣告都是一樣
     */
    protected void advertisement() {
        Log.e(TAG, "advertisement: 某公司的招聘廣告");
    }

    /**
     * 所有面試者做一樣的題目
     */
    protected void makeTopics() {
        Log.e(TAG, "makeTopics: 所有面試者做一樣的題目");
    }

    /**
     * 是個美女就盡量不問,直接問何時來上班,你懂的
     */
    protected abstract void interview();

    /**
     * 無非就是三種情況
     * 1.錄用
     * 2.看看有沒有更好的
     * 3.棄用
     */
    protected void discuss() {
        switch (getState()) {
            case accepted:
                Log.e(TAG, "discuss: 录用");
                break;
            case consider:
                Log.e(TAG, "discuss: 考虑");
                break;
            case unaccepted:
                Log.e(TAG, "discuss: 弃用");
                break;
        }
    }

    /**
     * 設置鉤子,默认不录用
     *
     * @return
     */
    protected InterviewState getState() {
        return InterviewState.unaccepted;
    }

    //申明为final,不希望子类覆盖这个方法,防止更改流程的执行顺序
    final public void run() {
        //1.出招聘广告
        advertisement();
        //2.制定面试题目
        makeTopics();
        //3.面试
        interview();
        //4.公司讨论
        discuss();
    }
}
package com.example.yancy.model.TemplateMethod;

/**
 * 创建日期:2018/8/28 0028 on 10:03
 * 描述: 枚举类,对应面试的三种情况
 * 作者: yancy
 */
public enum InterviewState {
    /**
     *  錄用
     */
    accepted,
    /**
     *  考慮
     */
    consider,
    /**
     * 棄用
     */
    unaccepted

}
package com.example.yancy.model.TemplateMethod;

import android.util.Log;

/**
 * 创建日期:2018/8/28 0028 on 10:13
 * 描述:张三前来面试
 * 作者: yancy
 */
public class ZhangSan extends Abstract{
    @Override
    protected void interview() {
        Log.e(TAG, "interview: 面试者是张三");
    }

    /**
     * 经过公司讨论,张三技术不合格
     * @return
     */
    @Override
    protected InterviewState getState() {
        return InterviewState.unaccepted;
    }
}
package com.example.yancy.model.TemplateMethod;

import android.util.Log;

/**
 * 创建日期:2018/8/28 0028 on 10:16
 * 描述:李四前來面試
 * 作者: yancy
 */
public class LiSi extends Abstract{

    @Override
    protected void interview() {
        Log.e(TAG, "interview: 面試者是李四");
    }

    /**
     * 经过公司讨论,李四技术不合格,但她是個美女,先考慮考慮
     * @return
     */
    @Override
    protected InterviewState getState() {
        return InterviewState.consider;
    }
}
package com.example.yancy.model.TemplateMethod;

import android.util.Log;

/**
 * 创建日期:2018/8/28 0028 on 10:19
 * 描述:
 * 作者: yancy
 */
public class WangWu extends Abstract {
    @Override
    protected void interview() {
        Log.e(TAG, "interview: 面試者是王五");
    }

    /**
     * 王五技術過關,那就選擇王五吧
     * @return
     */
    @Override
    protected InterviewState getState() {
        return InterviewState.accepted;
    }
}

Boss想看看面试情况

  @Test
    public void testBoss(){
         // 描述: 老板需要知道面试结果
        ZhangSan zhangSan=new ZhangSan();
        zhangSan.run();

        LiSi lisi=new LiSi();
        lisi.run();

        WangWu wangWu=new WangWu();
        wangWu.run();
    }

输出结果

advertisement: 某公司的招聘廣告
makeTopics: 所有面試者做一樣的題目
interview: 面试者是张三
discuss: 弃用

advertisement: 某公司的招聘廣告
makeTopics: 所有面試者做一樣的題目
interview: 面試者是李四
discuss: 考虑

advertisement: 某公司的招聘廣告
makeTopics: 所有面試者做一樣的題目
interview: 面試者是王五
discuss: 录用

具体代码就是这样,不过流程出现问题,不是面试一个人,就加载一次面试招聘广告。

欢迎大家指正…

猜你喜欢

转载自blog.csdn.net/weixin_39923324/article/details/82143763