我看道下面的这段解释,解释的很好,我终于算是醒悟了
抽象工厂模式(Abstract Factory)
抽象出来一个基础接口定义了产品功能(对应抽象产品角色),每个实现此接口的子类就是具体产品(对应具体产品角色),然后定义一个工厂接口(对应抽象工厂角色),实现了工厂接口的子类就是具体工厂(对应具体工厂角色),这时候,接口编程的优点就体现了,我们可以随时新增具体产品类(只需要实现产品接口),只需要同时新增一个工厂类,客户端就可以轻松调用生成新产品的代码。
抽象工厂模式的灵活性就体现在这里,无需改动原有的代码,毕竟对于客户端来说,静态工厂模式在不改动StaticFactory类的代码时无法新增产品,如果采用了抽象工厂模式,就可以轻松的新增拓展类。
抽象工厂模式的用意为:给客户端提供一个统一接口,可以创建多个复杂产品族中的产品对象
抽象工厂角色: 这是抽象工厂模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。它由具体的类来实现。
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般由抽象类或者接口来实现。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现
实例代码:
interface food { }
class A implements food{}
class B implements food{}
interface AbstractFactory { Food produceFood();}
class FactoryA implements AbstractFactory {
@Override
public Food produceFood() {
return new A();
}
}
class FactoryB implements AbstractFactory {
@Override
public Food produceFood() {
return new B();
}
}
客户端调用:
public class Client{
public Food getFood(String name){
Food x= new FactoryA().produceFood();
return x;
}
}
但是,对于为什么有要有工厂模式,抽象工厂模式有什么用?,我还不清楚