美文网首页
1 抽象工厂方法优于构造器

1 抽象工厂方法优于构造器

作者: 老段来了快跑 | 来源:发表于2019-01-11 18:29 被阅读0次

    1抽象工厂的优点(相对于构造器)

    1.1 名字


    抽象工厂方法(以下简称“AFM(abstract factory method)”),AFM的方法名可以任意设置,而构造器只能用类名。在如下场景,AFM显出优势:

    BigInteger i = BigInteger.probablePrime(3, r);//生成素数(只能被自己和1整除)

    上述代码可以清晰表达,获取素数。如果采用构造器new BigInteger(),就不能表达素数的含义。

    1.2 不需要一定要创建个新的对象


    Boolean b = Boolean.valueOf(true);

    public static Boolean valueOf(boolean b) {

            return (b ? TRUE : FALSE);

     }

    ValueOf()返回的是一个创建好的 final static Boolean 对象,并没有新创建对象,提升了效率

    1.3 返回的对象可以是子类


    Set<Object> set = Collections.newSetFromMap(new HashMap<Object, Boolean>());

    Collections.newSetFromMap()上述接口返回类型是set,但是实际返回对象的类,是SetFromMap类。SetFromMap类是 Collections类的内部私有类,这样就影藏了SetFromMap,让包更简洁。

    1.4 按照参数返回不通对象


    EnumSet<Color> s = EnumSet.of(Color.RED, Color.GREEN)

    根据参数的数量,返回不通对象。小于等于64个时,返回RegularEnumSet。大于64时,返回JumboEnumSet,从达到最优的效率。

    1.5 返回的对象类,可以延迟实现


    Class.forName("oracle.jdbc.driver.OracleDriver");

    Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc",USER,PASSWORD);

    Connection 是oracle.jdbc.driver.OracleDriver里实现的,是在调用过程中传入的,

    2. 抽象工厂方法的缺点

    2.1 构造器私有,不能被继承



    2.2 文档中,抽象方法混在一般方法中,比较难找到


    内容来自《effective java 3rd version》

    相关文章

      网友评论

          本文标题:1 抽象工厂方法优于构造器

          本文链接:https://www.haomeiwen.com/subject/biptdqtx.html