zoukankan      html  css  js  c++  java
  • 读Effective Java笔记之one:static Factory methods instead of Constructors (静态工厂方与构造器)

    获取类的实例的方法有很多种,在这很多种方法中,它们各有优缺,各有特点。这里,只介绍2中方法

    1.使用构造方法

    public class Person
    {
        private String sex;
        /**
         * <构造函数>
         */
        public Person(String sex)
        {
            this.sex = sex;
            System.out.println("this is constructor method");
        }
        
    }

    调用如下:

    1 public static void main(String[] args)
    2     {
    3         Person male = new Person("男");
    4         Person female = new Person("女");
    5     }

    这里可以看到,使用构造获取类的实例,每次都要new(创建新对象),每个实例对象都不相同,不能重复使用,降低了效率。并且构造方法名称与类名必须一致,如果构造方法太多(参数不同),容易引起混淆。

    2.静态工厂方法

     1 /**
     2      * <构造函数>
     3      */
     4     public Person(String sex)
     5     {
     6         this.sex = sex;
     7         System.out.println("this is constructor method");
     8     }
     9     
    10     private final static Person male = new Person("男");
    11     private static final Person female = new Person("女");
    12     /**
    13      * <静态工厂方法>
    14      * <功能详细描述>
    15      * @return
    16      * @see [类、类#方法、类#成员]
    17      */
    18     public static Person getMale(){
    19         return male;
    20     }
    21     public static Person getFemale(){
    22         return female;
    23     }

    调用:

    1 public static void main(String[] args)
    2     {
    3         Person male = Person.getMale();
    4         Person female = Person.getFemale();
    5     }

    上面可以看到:

    静态工厂方法的方法名可以是任意的,这一特性的优点是可以提高程序代码的可读性

    静态工厂方法每次被调用的时候,是否会创建一个新的对象完全取决于方法的实现(上面的实现是不会创建新对象)

    new语句只能创建当前类的实例,而静态工厂方法可以返回当前类的子类的实例,这一特性可以在创建松耦合的系统接口时发挥作用

    但是,同样它有缺点:

    静态工厂方法依赖于构造方法,如果构造为private或者default,就无法使用该方法;

    静态工厂所用的都是静态方法,所以有其局限性。但是java有一种很好的机制去解决一些局限性,这种机制就是反射(后续);

    逃避不一定躲得过,面对不一定最难过
  • 相关阅读:
    主键为整型数据库设计
    raid1与raid5
    asp.net限时发送手机验证码
    利用jQuery与.ashx完成简单的Ajax
    Solr使用in语法查询
    Solr高效利用:Solr实现SQL的查询与统计
    lucene 的评分机制
    fastcgi配置
    安装elasticsearch及中文IK和近义词配置
    php多进程处理
  • 原文地址:https://www.cnblogs.com/yangzhenlong/p/4756298.html
Copyright © 2011-2022 走看看