工厂方法模式:定义一个用于创建对象的接口;

需要创建复杂对象时可使用工厂方法模式,有些对象可以直接用new的方式创建就无需用工厂模式;

类型:创建类模式

工厂模式的优点:

1)、代码结构清晰,有效的封装变化。产品类的实例化通常是复杂多变的,通过工厂模式,客户端无需关系产品类实例化过程,只需依赖工厂即可;

2)、降低产品类和调用者类的耦合度,调用者无需关心产品类的依赖类;

工厂方法模式的组成:

1)、工厂接口:定义类方法,是工厂方法模式的核心,用于与调用者交互的接口;

2)、工厂类实现:决定如何实现产品类;

3)、产品接口:定义产品的规范;

4)、产品实现:产品接口的具体实现,决定客户端的行为。

java工厂方法模式 工厂方法 java_java

案例:

/*工厂方法接口*/
public interface Factory{
   public Productor getProduct();
   public Productor getProduct(string args);
}
/*工厂实现类*/
public class FactoryImp implements Factory{
    public Productor getProduct(){
         return new ProductorImp();
    }
   public Productor getProduct(String args){
         return new ProductorImp(args);
    }
}
/*产品接口*/
public interface Productor {
    public void apple();
    public void oppo();
}
/*产品实现类*/
public class ProductorImp implements Productor{
    private String type;
    pulic ProductorImp(){};
    public Productor(String type){
       this.type = type;
    }
    public void apple(){
     System.out.println("The type is" + type);
    }
    public void oppo(){
     System.out.println("The type is " + type);
    }

}

实际上该案列可以直接用new关键字创建对象,无需采用工厂方法模式,工厂方法模式在创建复杂对象时使用比较合适;(复杂对象:我们可以理解为当创建一个对象时需要依赖许多其他对象,即需要创建其他许多对象时,可以采用工厂模式,此时工厂模式将存在的依赖关系都封装在产品类中,客户端只需要调用共场方法就可以创建需要的对象,而不需要再创建其他依赖的对象,这样实现了客户端与产品类的依赖对象的解耦);
我们来看一个例子:

class Apple{
    public app(){
       System.out.println("苹果");
   }
}
class Orange{
    public org(){
       System.out.println("橙子");
   }
}
class GuoLan{
    private Apple app;
    private Orange org;
    public GuoLan(Apple app,Orange org){
    this.app = app;
    this.org = org;
    }
    public guoLan(){
       System.out.println("果篮里有:"+app.app()+org.org());
   }
}
public class Client{
   public static void main(Sting[] args){
        Apple app = new Apple();
        Orange org = new Orange();
       GuoLan gl = new(app,org);
       gl.guoLan();
   }
}

在客户段创建使用GuoLan类时,依赖Apple、Orange类,但是这两个类与客户端没有关系,此时我们可以通过工厂模式创建该对象,具体实现由上一个小例子可以写出来,这里就不具体实现了;