工厂方法模式

框架的基础知识

     框架就是能完成一定功能的半成品软件。它不能完全实现用户的功能,只是实现用户需要的功能的一部分。框架级的软件主要客户是开发人员,而不是最终用户。由于框架完成了一定功能,而且通常是一些基础的、有难度的、通用的功能,这就避免了我们在应用开发的时候完全从头开始,而是在框架已有的功能之上继续开发,也就是说会复用框架的功能,从而加快应用的开发进度。框架给了我们一个精良的程序结构,框架定义了应用的整体结构,包括类和对象的分割、各部分的主要责任、类和对象怎么协作,以及控制流程等,由于框架大多出自大师之手,设计都很精良,基于这样的框架来开发,一般会遵循已经规划好的结构来开发,从而使开发应用程序的结构也相对变得精良了。

如上图所示,应用程序和框架之间普遍是相互交互的,应用程序做一部分工作,框架做一部分工作,最后由应用程序和框架组合起来完成用户的功能需求。

 

之前讲的简单工厂模式(本质是“选择实现”)其实是工厂方法模式(本质是“让子类来选择实现”)的一种。我们先来看它的结构图:

 示例代码:

public interface Api
{
   public void operation(string s);
}

public class ImplA implements Api
{
  public void operation(string s)
  { 
     System.out.println(s);
  }
}

public abstract class Factory
{
    public void someMethod()
    {
        //此处体现了Ioc/DI 控制反转/依赖注入 的思想(程序中用到的外部对象或资源,不是自己主动去new或获取,而是被动的获取,此处是子类提供)
        Api api=factoryMethod();
        api.operation("工厂方法模式");
    }
    //定义了一个抽象方法,该方法由子类来实现,子类实现的时候会“选择实现”,即“让子类来选择实现”
    protected abstract Api factoryMethod(); 
}

public class SubFactoryA extends Factory
{
    protected Api factoryMethod()
    {
        return new ImplA();
    }
}

public class Client
{
  public static void main(string[] args)
  {
    //现在选择判断的问题从简单工厂的内部逻辑移到了客户端
    Factory factory = new SubFactoryA();
    factory.someMethod();
  }
} 

 

 工厂方法模式充分体现了开放-封闭原则(对扩展开放-对修改封闭),如果要新增一个功能ImplC,只需要添加一个SubFactoryC跟一个Implc即可,不需要像简单工厂那样去修改内部选择判断的逻辑。

上面提到了Ioc/DI,其实Ioc控制反转与DI依赖注入讲的是一回事,只不过是站在不同的角度看待问题,DI依赖注入是站在应用程序的角度来看(应用程序依赖容器创建并向它注入它所需要的外部对象或资源)Ioc控制反转是站在Ioc/DI容器的角度来看(容器控制应用程序,由容器反向地向应用程序注入其所需要的外部对象或资源)

Ioc/DI思想上的转变,本来应用程序时老大,要获取什么资源都是主动出击,但现在变被动了,被动地等待Ioc/DI容器来创建并注入。这样就有效的分离了对象和它所需要的外部资源,使它们松散耦合。

posted @ 2015-06-26 17:11  何塞穆里尼奥  阅读(193)  评论(0编辑  收藏  举报