public class Main {
public static void main(String[] args) {
AbstractProjectManager projectManager;
projectManager = new PayServiceProjectManager();
projectManager.processProject();
System.out.println("=============");
projectManager = new UserServiceProjectManager();
projectManager.processProject();
}
}
public abstract class AbstractProjectManager {
/**
* 定义模板方法,声明final,防止子类覆盖他,更改顺序,流程是一样复用
*/
public final void processProject(){
review();
degisn();
coding();
test();
online();
}
/**
* 各个项目都需要评审,具体方法
*/
public void review(){
System.out.println("项目需求评审");
}
/**
* 各个项目都需要设计,具体方法
*/
public void degisn(){
System.out.println("UI UE进行设计");
}
/**
* 抽象方法,由就具体子类进行实现,编码耗时不一样
*/
public abstract void coding();
/**
* 抽象方法,由就具体子类进行实现,测试有多种,自动化测试、安全测试、压力测试、手工测试
*/
public abstract void test();
/**
* 抽象方法,由就具体子类进行实现,上线有全量发布,灰度发布,停机发布
*/
public abstract void online();
}
public class PayServiceProjectManager extends AbstractProjectManager {
@Override
public void coding() {
System.out.println("开发耗时30天");
}
@Override
public void test() {
System.out.println("功能测试,安全测试,压力测试");
}
@Override
public void online() {
System.out.println("全量上线");
}
}
public class UserServiceProjectManager extends AbstractProjectManager {
@Override
public void coding() {
System.out.println("开发耗时10天");
}
@Override
public void test() {
System.out.println("功能测试,压力测试,还有手工测试");
}
@Override
public void online() {
System.out.println("灰度发布,全量上线");
}
}