黑马程序员之模版方法模式

昨天看的毕老师视频,毕老师写的时候程序主要的作用是查看某些方法的执行速度,这个方法很好用、很实用。不过当时发现了一个问题那就是 抽象的方法和super类中的相关方法耦合度很低,根本没牵涉到数据的传递之类的。

今天就突发奇想 写个耦合度高点的 本人技术有限有几个地方没处理好 欢迎指正。

需求:有在某个地方看到过说在内存中有一个字符串池,当你申明一个字符串时,它会先在字符串池中找,如果找到就直接用,如果找不到就重新自己创建
ps:这句话好像是学.net的时候听过的 现在就想起来了测试下,想起来张孝祥老师说过有个设计模式叫享元模式看看是不是String已经是在用了 。

 

代码如下
 1 abstract class MotherMoth{//创建一个抽象的super类
 2      public final void bijiao(String a,String b){//创建super的比较函数
 3          System.out.println("参数:"+a+"\t\t=\t\t参数:"+b+"\t的值为:"+(a==b));
 4          System.out.println("参数:"+a+"\t\tEquals\t\t参数:"+b+"\t的值为:"+a.equals(b));
 5      }
 6      
 7      
 8      
 9      public abstract String[] function();//这是个方法在我的计划中是提供数据用的 不过因为是比较用的  所以需要两个字符串 所以就返回数组了
10                                          //可惜返回的数组长度在本抽象方法中没法控制长度   如果有更好的解决方法请留言
11      
12      public final void kaishi(){//定义暴露出来的类 final是因为不想让子类修改  上面的以一样
13          String[] agrs=function();//从抽象函数中获取数组
14          if (agrs!=null&&agrs.length>0) {//本来在我的测试中根本没写这个判断 发表博客的时候才加上的  还有个问题问大家  在这句语句中有个
15                                          //agrs!=null  我以前看到过别人写的是 null!=agrs  好像这个还牵涉什么性能问题  
16                                          //    现在忘了 网大家指点下
17              bijiao( agrs[0], agrs[1]);//调用
18         }else
19             System.out.println("传入的数组不符合父类的要求");
20         
21      }
22  }
23 
24 class Function extends MotherMoth {
25 
26     @Override//预编译命令
27     public String[] function() {//重写父类的抽象
28 
29         String[] str = new String[2];//声明String数组 返回数据用
30         bijiao("ab","ab");//因为本类集成了MotherMoth类 所以就有了bijiao方法         调用bijiao函数(直接传入双引号定的数据) 
31         str[0]=new String("ab");//用String类型的数据初始化数组
32         str[1]=new String("ab");
33         return str;//返回数组
34     }
35 
36     public static void main(String[] args) {//main方法
37         new Function().kaishi();//用本类的匿名对象访问从父类继承下来的kaishi()方法
38     }
39 }

总结:用String创建的实例存放在堆中 变量名称存放的只是引用 。用双引号直接创建的String对象好像就是用了享元模式  或者说相同的就是同一个

 

posted @ 2013-03-27 17:10  天 下  阅读(202)  评论(0编辑  收藏  举报