研磨设计模式之简单工厂模式

定义:提供一个创建对象实例的功能,而无需关心其具体的实现,被创建的实例的类型可以是接口,抽象类,也可以是具体的类。

简单工厂的结构:


研磨设计模式之简单工厂模式_第1张图片


Api:定义客户所需要的功能接口。
Impl:具体实现Api的实现类,可能会有多个。
Factory:工厂,选择合适的实现类来创建Api接口对象。
Client:客户端,通过Factory来获取API接口对象,然后面向API接口编程。

简单工厂的实现:

public interfacte Api{
    public void operator(String s);
}
定义具体的实现类ImplA


public class ImplA implements Api
{
    public void operator(String s)
     {
            System.out.println(s);
    }
}
定义具体的实现类ImplB

public class ImplB implements Api
{
    public void operator(String s)
    {
        System.out.println(s);
    }
}
工厂类

public class Factory
{

    public static Api  CreateApi(int condition)
    {
        Api api=null;
        if(condition==1)
        {
            api=new ImplA();
        }else if(condition==2)
        {
            api=new ImplB();
         }
        return api;
    }
}
客户端类:

public  class Client
{
    public static  void main(String [] args)
    {
        Api api=Factory.CreateApi(1);
        api.operation("hello GOF");
    }
}
简单工厂的调用顺序示意图:

研磨设计模式之简单工厂模式_第2张图片

简单工厂的优点:
(1)帮助封装:简单工厂虽然很简单,但帮助我们实现了组件的封装,然后让组件外部能真正面向接口编程。
(2)解耦:通过简单工厂,实现了客户端和具体实现类的解耦。
缺点:
(1)可能增加客户端的复杂度
        如果通过客户端的参数来选择具体的实现类,必须让客户端能理解各个参数所代表的具体功能和含义,增加客户端使用的难度,也暴漏了内部实现,可以选用通过配置的方式类实现。

简单工厂的本质:
    
    简单工厂的本质是:选择实现。

注意简单工厂的重点在选择,实现时已经做好了的,就算实现再简单,也要由具体的实现类来实现,而不是在简单工厂里面来实现。简单工厂的目的在于为客户端来选择相应的实现。


你可能感兴趣的:(研磨设计模式)