/**
- 通过反射机制实现的工厂
*/
public class FoodFactory {
public static Food getFood(String type) {
Food food = null;
try {
food = (Food) Class.forName("info.zhw." + type).newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return food;
}
}
FoodFactory就利用了基类,返回了该类型的子类型。
> 3、不必在每次调用他们的时候都创建一次对象。
这使得不可变类可以使用预先构建好的实例,或者将构建好的实例缓存起来,进行重复利用,从而避免了创建不必要的重复对象。Boolean.valueOf(boolean b)方法说明了这项技术,它从来不创建对象。
/**
* Returns a {@code Boolean} instance for the specified boolean value.
* <p>
* If it is not necessary to get a new {@code Boolean} instance, it is
* recommended to use this method instead of the constructor, since it
* returns its static instances, which results in better performance.
*
* @param b
* the boolean to convert to a {@code Boolean}.
* @return {@code Boolean.TRUE} if {@code b} is equal to {@code true},
* {@code Boolean.FALSE} otherwise.
*/
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
/**
* The {@code Boolean} object that represents the primitive value
* {@code true}.
*/
public static final Boolean TRUE = new Boolean(true);
/**
* The {@code Boolean} object that represents the primitive value
* {@code false}.
*/
public static final Boolean FALSE = new Boolean(false);
使用构造函数,调用其中的方法,则实例化一个类是必不可少的步奏,而是使用静态工厂方法,则可以对对象进行重复利用,这个特点在单例模式中使用颇多。其将构造方法私有,只能通过getInstance()获取实例,从而达到实例重复利用的目的。
> 4、使代码简洁
与第一点有点雷同,主要也是在方便理解的基础上作出的改进。
* * *
#### **3.缺点从何体现**
> 1、如果类不含有公有或受保护构造器,就不能被子类化。
> 2、和静态方法实际上没有任何区别。其无法在API文档中明确标出,推荐使用管用名称管理。
下面是 静态工厂方法的一些惯用的名称:
valueof,getInstance,newInstance,getType,newType 等等
> 3、网上摘录的一段([http://blog.163.com/zhuowh2006@126/blog/static/10182372420133220511247/]( ))
由于工厂类集中了所有实例的创建逻辑,这就直接导致一旦这个工厂出了问题,所有的客户端都会受到牵连;而且由于简单工厂模式的产品室基于一个共同的抽象类或者接口,这样一来,但产品的种类增加的时候,即有不同的产品接口或者抽象类的时候,工厂类就需要判断何时创建何种种类的产品,这就和创建何种种类产品的产品相互混淆在了一起,违背了单一职责,导致系统丧失灵活性和可维护性。而且更重要的是,简单工厂模式违背了“开放封闭原则”,就是违背了“系统对扩展开放,对修改关闭”的原则,因为当我新增加一个产品的时候必须修改工厂类,相应的工厂类就需要重新编译一遍。
* * *
#### **4.总结**
简而言之,静态工厂方法和公有构造齐都各有用处,我们需要理解她们各种的长处。静态工厂通常更加合适,因此切记第一反应就是提供公有的构造器,而不先考虑静态工厂。
参考地址:[http://www.cnblogs.com/sluggard/p/4343426.html]( )
## 学习交流
> ![](https://img-blog.csdnimg.cn/img_convert/235f47fb775a8ed6a4993c2c5a0b005c.webp?x-oss-process=image/format,png)
>
> ![](https://img-blog.csdnimg.cn/img_convert/549204bc693f004c523f8cdc57b133f2.webp?x-oss-process=image/format,png)
群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0