黑马程序员技术交流社区

标题: 抽取静态方法 [打印本页]

作者: d342784178    时间: 2015-2-26 09:18
标题: 抽取静态方法
这里有一个BaseManager父类和几个子类
我想吧子类的写成单例 的
但是每个子类都要写一个getInstance方法
于是想抽取出来放到父类中
但是getInstance是static的
如何放到父类 求大神帮助!

作者: sofeel    时间: 2015-2-26 09:46
本帖最后由 sofeel 于 2015-2-26 09:57 编辑
  1. 没考虑对
复制代码

作者: sofeel    时间: 2015-2-26 10:13
本帖最后由 sofeel 于 2015-2-26 15:45 编辑
  1. public class Testt {

  2.         public static void main(String[] args) {

  3.                 /*
  4.                  * 用Object实现。(泛型做不了)
  5.                  * */
  6.         }

  7. }

  8. class BaseManager{
  9.        
  10.         public BaseManager(){}
  11.         public  static Object getInstance(){

  12.                 return new Object();
  13.         }
  14. }
  15. //饿汉
  16. class Zi1 extends BaseManager{
  17.        
  18.         private static Zi1 zi1=new Zi1();
  19.         private Zi1() {        }
  20.        
  21.         public static Zi1 getInstance(){

  22.                 return zi1;
  23.         }       
  24. }

  25. //懒汉
  26. class Zi2 extends BaseManager{
  27.        
  28.         private static Zi2 zi2;
  29.         private Zi2() {        }
  30.        
  31.         public static Zi2 getInstance(){
  32.                 if(zi2==null)//没考虑同步
  33.                         zi2=new Zi2();
  34.                 return zi2;
  35.         }       
  36. }
复制代码


作者: d342784178    时间: 2015-2-27 08:43
sofeel 发表于 2015-2-26 10:13

你这没有意义嘛 父类的getInstance没有作用啊
而且我的目的就是省掉在子类中写getInstance方法
作者: sofeel    时间: 2015-2-27 10:21
d342784178 发表于 2015-2-27 08:43
你这没有意义嘛 父类的getInstance没有作用啊
而且我的目的就是省掉在子类中写getInstance方法 ...

一涉及静态传值,程序就容易写死。
         *
         * 单例模式中的公用方法,若强行向上抽取,也只能是父类自娱自乐,子类没法将自己的本类对象传递进去。因为:静态限制的泛型传值和多态传值。
作者: 艺多不压身丶    时间: 2015-2-27 10:27
装饰模式,记得吗?用装饰模式可以实现
作者: sofeel    时间: 2015-2-27 10:43
本帖最后由 sofeel 于 2015-2-27 10:44 编辑
艺多不压身丶 发表于 2015-2-27 10:27
装饰模式,记得吗?用装饰模式可以实现

装饰可以的。但是需要在子类中复写抽象的方法。
而版主的意思是:直接拿着父类的方法用(我是这样解读他的意思的)。这就要涉及到参数传值的问题,静态方法直接限制了参数传值。
作者: sofeel    时间: 2015-2-27 10:47
sofeel 发表于 2015-2-27 10:43
装饰可以的。但是需要在子类中复写抽象的方法。
而版主的意思是:直接拿着父类的方法用(我是这样解读他的 ...

可能是我想 多了! 呵呵
作者: 艺多不压身丶    时间: 2015-2-27 11:49
sofeel 发表于 2015-2-27 10:47
可能是我想 多了! 呵呵

装饰模式哪来的抽象方法?,装饰模式是那父类的对象做引用。别搞笑了好不的
作者: sofeel    时间: 2015-2-27 12:18
艺多不压身丶 发表于 2015-2-27 11:49
装饰模式哪来的抽象方法?,装饰模式是那父类的对象做引用。别搞笑了好不的 ...

好吧,我不懂装饰。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2