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中,返回类的唯一实现对象。
相关文章推荐
- 第一条:考虑使用静态工厂方法代替构造器
- 考虑使用静态工厂方法代替构造器
- Effective Jave——第1条: 考虑用静态工厂方法代替构造函数
- [Effective Java] 第1条 考虑用静态工厂方法代替构造函数
- 【代码优化】考虑使用静态工厂方法代替构造器
- java用静态工厂代替构造函数使用方法和优缺点
- [Effective Java] 第1条 考虑用静态工厂方法代替构造函数
- 【Effective Java读书笔记】创建和销毁对象(一):考虑使用静态工厂方法代替构造器
- 创建和销毁对象--考虑用静态工厂方法代替构造函数
- Effective Java随笔(一) 善于使用静态工厂方法代替构造函数获取实例
- item1:使用静态工厂方法代替构造函数
- 《Effective Java》: 考虑用静态工厂方法代替构造函数
- Effective Java 1:考虑使用静态工厂方法代替构造器
- Item 1:考虑用静态工厂方法代替构造函数
- 考虑用静态工厂方法代替构造器
- Java学习笔记1:考虑用静态工厂方法代替构造器
- 1、考虑用静态工厂方法代替构造器(effective java)
- 改善JAVA代码01:考虑静态工厂方法代替构造器
- 【代码优化】考虑使用静态工厂方法取代构造器
- 编程经验之考虑使用静态工厂方法