版权声明:本文为博主原创文章,未经博主允许不得转载。 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: 录用
具体代码就是这样,不过流程出现问题,不是面试一个人,就加载一次面试招聘广告。
欢迎大家指正…