Coundy

   漫步风中,倾听自己的脚步,在自我沉浸中,找寻逝去的灵魂

posts - 27,comments - 2,trackbacks - 0

一、对象的创建
       第1条:考虑用静态工厂方法代替构造函数
              概念:所谓静态工厂方法(static factory method),实际上只是一个简单的静态方法,它返回的是类
                         的一  个实例。
              例子:pbulic static Boolean getBoolean()
                          {
                               return (Boolean.TRUE);
                          }
                优点:1、与构造函数相比,静态工厂方法可以具有一个具有意义的名字
                             2、与构造函数相比,每一次调用并不一定非要创建一个新的对象
                                   例子:
                                           class SingletonFactory
                                            {   // 可以看作全局唯一的变量
                                                  private static singletonfactory=new SingletonFactory();

                                                  private SingletonFactory()
                                                  {}

                                                  public static SingletonFactory getSingletonFactoryInstance()
                                                  {    
                                                      //这里并不是每次都返回一个新的对象,而是反复返回同一个对象
                                                        return singletonfactory;
                                                    }
                                             }
                               3、与构造函数不同,可以返回一个原返回类型的子类型的对象
                                       例子:
                                               Interface BaseInterface
                                                {
                                                        void printlns();
                                                }
                                                class BaseImp implements BaseInterface
                                                {
                                                         public BaseImp ()
                                                         {}
                                                         public void printlns()
                                                          {
                                                                  System.out.println("BaseImp's printlns method ");
                                                           }
                                                }

                                                abstract class SingletionFactory
                                                {
                                                      private static SingletionFactory singletionfactory;
                                                     private static String classname="";
                                                      private static Object object=new Object();

                                                      public static BaseInterface getBaseInterface()
                                                      {
                                                               if (singletionfactory==null)
                                                                {
                                                                     synchorinzed(obj){
                                                                          try
                                                                          {
                                                                                   singletionfactory=(SingletionFactory)Class.forNmae(
                                                                                   classname).newInstaance();
                                                                          }
                                                                          catch(ClassNotFoundException e)
                                                                          {
                                                                            
                                                                           }
                                                                     }
                                                                 }
                                                                return singletionfactory.createObject();
                                                       }
                                                        abstract BaseInterface createObject();
                                                }

                      缺点:
                          1、如果类没有public or protected 构造函数,不能子类化
                          2、与其他静态方法没有任何区别,静态工厂方法代表了一种对规范的背离
posted on 2007-04-12 04:14 Coundy 阅读(1506) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航: