zoukankan      html  css  js  c++  java
  • 工厂方法模式

    框架的基础知识

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

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

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

     示例代码:

    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容器来创建并注入。这样就有效的分离了对象和它所需要的外部资源,使它们松散耦合。

  • 相关阅读:
    Exp4 恶意代码分析 Week6
    Exp3 免杀原理与实践 Week5
    Exp2 后门原理与实践 Week4
    Exp1 PC平台逆向破解 Week3
    Exp0 Kali安装 Week1
    2018-2019-2 《网络对抗技术》Exp9 WebGoat 20165326
    2018-2019-2 《网络对抗技术》Exp8 Web基础 20165326
    2018-2019-2 《网络对抗技术》Exp7 网络欺诈防范 20165326
    2018-2019-2 《网络对抗技术》Exp6 信息搜集与漏洞扫描 20165326
    2018-2019-2 《网络对抗技术》Exp5 MSF基础应用 20165326
  • 原文地址:https://www.cnblogs.com/hanmeimei/p/4602761.html
Copyright © 2011-2022 走看看