静态工厂方法完全代替构造器 上?

69 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 21 天,点击查看活动详情

前言

今天这篇文章的目的是为了提高自己java代码的的素质,所在此分享出来,希望大家也能做到。注:这个是需要一定java知识,新手就收藏起来看就行了。资料来源于 Effective Java这本书。

优点1静态方法有对应的名称

想来我们平时都是使用构造器比较多,但是当我们需要多个构造器时,我们一般的做法就是直接传入不一样的参数,或者将参数的顺序调换。这样的做法当然完全没有问题,但是在开发人员使用时就需要花费多一点的时间理解。但是静态工厂就可以通过名称的设计从而达到通俗易懂的效果。

 public static People getKidInstance() {//获取孩子实例
11         return Kid;
12     }
13     public static People getOldInstance() {//获取老人实例
14         return old;
15     }

优点2减少创建重复对象

当我需要一些不可变类即(final 类)时,我们不必每次在构造器中去重复创建一个重复的类。还可以实现单例模式(Singleton),因为我们在静态工厂中可以去返回相同的类。

private static final StaticFactory demo = new StaticFactoryDemo();//私有,静态,final,构造方法实例化对象
3     public static StaticFactory getInstance(){//公有的静态工厂方法,获取实例化对象
4            return demo;
5     }
6     public void printMes(){//普通方法
7           System.out.println("Test Static Factory Class!"); 
8     }

优点3可以返回原类型所属的子类类型的对象

这个也比较好理解,就拿Java的List举个例子,你可以有以下三种实现方式。像下面这个一般是服务于接口,在以接口为基础的框架中使用较为频繁。

List<String> sStrings1 = new Vector<String>();
List<String> sStrings2 = new ArrayList<String>();
List<String> sStrings3 = new LinkedList<String>();

总结

前面这几种是比较好理解的,接下来该介绍一些比较难理解的优点以及对应的缺点。