二十一:简单工厂模式

一:简单工厂模式的实现
比如我们要描述以下三种水果:葡萄Grape,草莓Strawberry,苹果:Apple.
(1)首先建立一个水果类Fruit接口,便于与其他植物区分开来.
(2)让Grape,Strawberry,Apple分别实现Fruit接口
(3)再建一个生产水果的工厂FruitFactroy,这个工厂提供一个静态方法:
public class FruitFactory{ 
public static getFruit(String which){ 
if(which.equals("apple")){ 
return new Apple(); 
}else if(){ 
} 
else if(){ 
} 
} 
} 

上面就是一个简单工厂模式的实现.这个模式根据传入的参数决定创建出哪一种产品类的实例.
缺点:当增加一个水果类时,这时就要修改FruitFactory,所以这个模式不完全具有"开-闭"原则.

二:简单工厂模式与其他模式之间的关系
A:单例模式
单例模式使用了简单工厂模式,换言之,单例类具有一个静态工厂方法提供自身实例,它使用一个静态属性存储自己的惟一实例,工厂方法仅仅提供这个实例.
B:多例模式
多例模式往往会有一个聚集属性,通过向这个聚集属性登记已经创建的实例达到循环使用实例的目的.
C:备忘录模式
单例模式和多例模式使用一个属性或聚集属性来登记所创建的产品对象,以便通过查询这个属性或者聚集属性找到并共享已经创建出来的产品对象,这就是备忘录模式的应用。

三:简单工厂模式在Java中的应用
A:DateFormat与简单工厂模式
DateFormat是一个抽象类,但却提供了很多static final的方法getDateInstance(),这个方法并没有也不可能调用DateFormat的构造子来提供自己的实例,作为一个工厂方法,getDateInstance()方法做了一些有趣的事情,它所做的事情基本上可以分为两个部分:一是运用了多态性,二是使用了静态工厂方法.返回的具体对象由它的子类SimpleDateFormat来完成。如果将来有新的具体子类被加入到系统中,那么工厂类可以将交给客户端的对象换成新的子类的实例,而对客户端没有任何影响,这种将工厂方法的返回类型设置成抽象类型的做法,叫做针对抽象编程,这也正是依赖倒转原则的应用.

你可能感兴趣的:(apple,编程)