设计模式之 模板设计模式

tech2023-02-05  111

模板设计模式

需求: 测试ArrayList和LinkedList的添加效率 public class AppTest { public static void main(String[] args) { System.out.println("开始"); //1970 - 1 - 1 long start = System.currentTimeMillis(); List<Integer> list = new ArrayList<Integer>(); //List<Integer> list = new LinkedList<Integer>(); for (int i = 1; i <= 1000000; i++) { list.add(0,1); } long end = System.currentTimeMillis(); System.out.println("结束: "+(end - start)); } } 此时,每次要测试的代码发生变化时, 都势必修改原有的代码 例如: 我现在测试ArrayList的添加效率然后又测试一下LinkedList的添加效率再然后我又要再次测试一下ArrayList的添加效率 那么又要把之前的代码写回来!
使用方法"模板模式",解决这个问题步骤: 定义一个抽象类写一个模板方法, 然后模板方法里面写不变的内容然后定义一个抽象方法把这个抽象方法,放在这个不变内容中,需要变化的位置然后具体这个需要变化的如何实现,就定义多一个类去继承这个抽象类就行了 abstract class Template { public void template() { System.out.println("开始"); long start = System.currentTimeMillis(); code(); long end = System.currentTimeMillis(); System.out.println("结束: "+(end - start)); } public abstract void code(); } //=======================时空线============================= //=========上面为服务端(提供服务,作者),下面为客户端(使用服务)===== class A extends Template { @Override public void code() { List<Integer> list = new LinkedList<Integer>(); for (int i = 1; i <= 1000000; i++) { list.add(0,1); } } } class B extends Template { @Override public void code() { List<Integer> list = new ArrayList<>(); for (int i = 1; i <= 1000000; i++) { list.add(0,1); } } } public class AppTest { public static void main(String[] args) { Template t = new A(); t.template(); } }

如果我们需要改变只需要改变new A 或者 new B就行了也可以扩展多个别的类
最新回复(0)