zoukankan      html  css  js  c++  java
  • 设计模式工厂方法模式(Factory method pattern)及应用

    • 面向对象的好处:
      • 通过封装,继承,多态把程序的耦合度降低。
      • 用设计模式可以使程序更加灵活,容易修改,且易于复用。

    1. 工厂方法模式

    • Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to subclasses.
    • 定义:为创建对象定义一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟到了子类。
    • 应用情景:
      • 客户类不关心使用哪个具体类,只关心该接口所提供的功能。
      • 接口有很多具体实现,或者抽象类有很多具体子类时,你可能需要为客户代码写一大串if-else逻辑来决定运行时使用哪个具体实现或者具体子类。
      • (Spring 中的依赖注入中的 IoC 容器,BeanFactory 与 ApplicationContext)
    • 代码示例:

    2. Spring中的BeanFactory与 ApplacationContext 的区别

    • 参考材料:Spring 思维导图,让 Spring 不再难懂(ioc 篇)
    • 参考材料:spring-framework-reference.pdf 3.16 3.16 The BeanFactory
    • IOC中最核心的接口是Beanfactory提供IOC的高级服务,而ApplicationContext是建立在BeanFactory基础之上提供抽象的面向应用的服务。
    • Use an ApplicationContext unless you have a good reason for not doing so.
    • image

    2.1 接口BeanFactory

    • org.springframework.beans.factory.BeanFactory是The root interface for accessing a Spring bean container. @since 13 April 2001
    • image
    • 参考BeanFactory接口的方法可以看出,该工厂方法只根据特定参数返回需要的bean,用户不必关系bean的构建过程,直接获取需要的bean即可。

    2.2 接口ApplacationContext

    • org.springframework.context.ApplicationContext是Central interface to provide configuration for an application.
    • image
    • 它继承BeanFactory,也是一个工厂类接口。

    3. Mybatis的SqlSessionFactory

    • 每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
    • 一个SqlSessionFactory(指上面的sqlMapper),正如它名字暗示那样,
      您可以通过它来创建一个SqlSession 实例。SqlSession 包含了所有执行数据库SQL 语句的方法。您能够直接地通过SqlSession 实例执行映射SQL 语句。
    • image
    • 该工厂类也根据相应参数获得一个SqlSession,用户不必关系SqlSession的具体创建细节。

    4. Hibernate的SessionFactory

    • 会话工厂(SessionFactory):SessionFactory是ConnectionProvider的会话和客户端工厂。 它拥有数据的二级缓存(可选)。org.hibernate.SessionFactory接口提供了工厂方法来获取Session的对象。
    • Hibernate架构:
      image
    • SessionFactory的方法,可以看出该工厂类为了得到Session的方法:
      image
  • 相关阅读:
    Newtonsoft.Json 处理多态类型的反序列化
    33条C#和.NET经典面试题目及答案
    转:原码,反码,补码详解
    使用OpenXML操作Office文档
    WPF的Binding学习笔记(二)
    WPF的Binding学习笔记(一)
    M6: 使用摄像头(CameraCaptureUI)
    M5: 使用StorageFile
    NYOJ144_小珂的苦恼_C++
    搜索水题四连发_C++
  • 原文地址:https://www.cnblogs.com/drawnkid/p/7239393.html
Copyright © 2011-2022 走看看