第一条建议:利用静态工厂方法,不用构造器

    xiaoxiao2025-01-09  7

    </pre><p></p><h2><span style="font-size:18px"><strong>一、什么是静态工厂方法</strong></span></h2><p></p><p><span style="font-size:18px">返回该类实例的静态方法,与普通的工厂方法是不一样。</span></p><p><span style="font-size:18px">不同之处在于:</span></p><p><span style="font-size:18px">工厂方法:用来构造类的多个实例。</span></p><p><span style="font-size:18px">静态工厂方法:返回类的实例化对象。</span></p><p><span style="font-size:18px">举例:</span></p><p></p><pre name="code" class="java"><span style="font-size:18px;">public class Garage { //创建静态工厂方法的形式。 public static Garage getInstance(){ return new Garage(); } }</span> 当然这个方法毫无意义,只是为了演示。

    二、静态工厂的优点、常见的例子、如何使用、何时使用

    ①、静态工厂能够拥有很清晰的方法名。

    优点:当用户使用该类的时候,能够很清晰的选择构造方法

    使用情形:假设我们现在要为一个类设定构造方法,发现我们需要创建4~5种的构造方法。

    那么当我使用的时候,我怎么知道要需要用那种构造方法获取该类的实例。

    这个时候,我们就可以使用静态工厂方法,清楚的写明,该方法的作用是什么。

    ②、不必每次调用的时候都创建一个新的对象。

    优点:这可以很好的减少程序的开销。

    使用情形:不需要频繁的创建该类的对象的时候,或者说该类的对象实例唯一的情况下。

    示例:创建一个唯一的车库(单例模式)

    <span style="font-size:18px;">public class Garage { //第一步:声明该类的静态实例 private static Garage garage; //第四步:发现用户可以直接通过new Garage()来创建实例。因为class提供默认的构造方法。 //但是我们需要的是通过静态工厂方法创建实例,所以创建私有的构造方法,让class不提供默认的构造器 private Garage(){} //第二步创建静态工厂方法的形式。 public static Garage getInstance(){ //第三步:判断车库是否被创建,如果被创建了就返回实例,如果没有创建则创建车库 if (garage == null){ garage = new Garage(); } return garage; } } </span>

    ③、可以返回该方法返回类型的子类对象。

    意思是:比如鸟的静态工厂返回的是Bird这个返回类型,但是Bird有很多子类,比如说麻雀。这就是返回子类对象。 当然,返回子类对象只是一种。我们可以返回 非公开的对象。可以随着类的变化而返回不同的实例。 优点:大大增加了返回类型灵活性。

    ④、使用类型参数推断

    优点: 我们原先写HashMap<K,V> map = new HashMap<K,V>(); 通过类型参数推断: 我们可以这样写 public class Test { public static <K,V> HashMap<K, V> getHashMap(){ return new HashMap<K,V>(); } public static void main(){ HashMap<String, Integer> map = getHashMap(); } } 这样就减少了一部分代码。 类型参数推断,还可以用于强制转型的问题(Android): 原先要这么写: TextView tv = (TextView)findViewById(id); 现在可以这样写 public static V View getViewById(int id){ return (V)findViewById(id); } public static void main(){ TextView tv = getViewById(R.id.text); }这样就可以不用写强制转型的代码了。 静态方法惯用的名称: ①、valueOf():将其他类型转换为与该类同等类型的值。  总而言之就是类型转换。 ②、getInstance():保证获取的对象,是唯一的实例。 ③、newInstance():保证获取的对象,都是不同实例的 总结:①、什么是静态工厂方法 ②、与工厂方法的区别是什么。 ③、静态工厂方法的优点及使用1、名称 (优点、如何使用、何时使用) 2、防止重复创建实例  3、类型参数推断 4、能够灵活的返回对象。   ④、常用的静态工厂方法的名称。

    转载请注明原文地址: https://ju.6miu.com/read-1295289.html
    最新回复(0)