您的位置:首页 > 其它

1、考虑使用静态工厂方法代替构造函数。

2006-01-11 14:37 357 查看
考虑使用静态工厂方法代替构造函数。 一、静态方法的一个好处是,与构造函数不同,静态方法具有名字。       使用场合:1、方法名字和参数列表组合,可明确的表达被创建对象的状态。构造函数却无此效果。2、如果有多个构造函数,且有相同的原型,则可使用之避免重复。二、静态方法的第二个好处是,与构造函数不同,他们每次被调用的时候,不要求非的创建一个新的对象。       使用场合:              1、可缓存被构造好的对象,避免每次都去创建对象的性能开销。如,单例模式。              2、可控制类实例的存在。如,使非可变类不会有两个相等的实例子存在。三、静态方法的第三个好处是,与构造函数不同,他们可以返回一个返回类型的子类型的对象。1、待返回的子类和其接口类(作为函数返回类型)结合,可隐藏实现细节,并且迫使客户通过接口来引用被返回的对象。       2、根据属性参数,可动态返回接口的不同实现类,从而提供软件灵活性。       应用:Jivi中的论坛工厂实现:[align=left]private static String className = "com.jivesoftware.forum.database.DbForumFactory";[/align][align=left] [/align][align=left]          public static ForumFactory getInstance(Authorization authorization) {[/align][align=left]        //If no valid authorization passed in, return null.[/align][align=left]        if (authorization == null) {[/align][align=left]            return null;[/align][align=left]        }[/align][align=left]        if (factory == null) {[/align][align=left]            synchronized(initLock) {[/align][align=left]                if (factory == null) {[/align][align=left]                    // Note, the software license expressely forbids[/align][align=left]                    // tampering with this check.[/align][align=left]                    //LicenseManager.validateLicense("Jive Forums Basic", "2.0");[/align][align=left] [/align][align=left]                    String classNameProp =[/align][align=left]                        JiveGlobals.getJiveProperty("ForumFactory.className");[/align][align=left]                    if (classNameProp != null) {[/align][align=left]                        className = classNameProp;[/align][align=left]                    }[/align][align=left]                    try {[/align][align=left]                        //Load the class and create an instance.[/align][align=left]                        Class c = Class.forName(className);[/align][align=left]                        factory = (ForumFactory)c.newInstance();[/align][align=left]                    }[/align][align=left]                    catch (Exception e) {[/align][align=left]                        System.err.println("Failed to load ForumFactory class "[/align][align=left]                            + className + ". Jive cannot function normally.");[/align][align=left]                        e.printStackTrace();[/align][align=left]                        return null;[/align][align=left]                    }[/align][align=left]                }[/align][align=left]            }[/align][align=left]        }[/align][align=left]        //Now, create a forum factory proxy.[/align][align=left]        return new ForumFactoryProxy(authorization, factory,[/align][align=left]                factory.getPermissions(authorization));[/align]    }四、静态方法的主要缺点是,类如果不含公有的或受保护的构造函数,就不能被子类化。五、静态方法的第二个缺点是,他们与其他的静态方法没任何区别。 习惯命名:1、  valueOf 实现一些有效的类型转换操作。如:Integer Integer.valueOf(int i);2、  getInstance() 返回类的实现对象。在singleton中,返回类的唯一实现对象。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息