该模式有4个成员:抽象工厂接口、工厂实现类、抽象产品接口、产品实现类
抽象工厂接口
package model02.factory;
/**
* 工厂类接口
*/
public interface FruitFactory{
public Fruit factory();
}
工厂实现类
package model02.factory;
/**
* 工厂接口实现类1
*/
public class AppleFactory implements FruitFactory{
public Fruit factory(){
return new Apple();
}
}
package model02.factory;/** * 工厂接口实现类2 */public class BananaFactory implements FruitFactory{public Fruit factory(){return new Banana();}}
抽象产品接口
package model02.factory;
/**
* 抽象产品接口
**/
public interface Fruit{
public void plant();
}
产品实现类
package model02.factory;
/**
* 产品实现类1
**/
public class Apple implements Fruit{
public void plant(){
System.out.println("种苹果树");
}
}
package model02.factory;/** * 产品实现类1 **/public class Banana implements Fruit{public void plant(){System.out.println("种香蕉树");}}
工厂模式的优缺点
优点
1:客户代码可以做到与特定应用无关,适用于任何实体类2:基类为工厂方法提供缺省实现,子类可以重写新的实现,也可以继承父类的实现。-- 加一层间接性,增加了灵活性
3:连接并行的类层次结构
4:良好的封装性,代码结构清晰
5:扩展性好,在增加产品类的情况下,只需要适当修改具体的工厂类或扩展一个工厂类,就可“拥抱变化”
6:屏蔽产品类。产品类的实现如何变化,调用者都不需要关心,只需关心产品的接口,只要接口保持不变,系统中的上层模块就不会发生变化
7:典型的解耦框架。高层模块只需要知道产品的抽象类,其他的实现类都不需要关心,符合迪米特法则,符合依赖倒置原则,符合里氏替换原则