Design pattern No1:Creational Patterns

Creational Patterns

目的

1.使系统独立:创建、组合和表示对象

2.类创建型模式:  使用继承改变被实例化的类

3.对象创建型模式:将实例化委托给另一个对象
内容

The Factory Pattern                    工厂模式    MyBatis[SQLSessionFactory]、Hibernate[SessionFactory]

The Abstract Factory Pattern      抽象工厂   JDBC[DataSource]

The Singleton Pattern                 单例模式    MyBatisUtils、HibernateUtils

The Prototype Pattern                 原型模式    JDBC的链接缓冲池


The Factory Pattern   工厂模式

场景

1. 创建复杂的对象,并进行初始化

2.根据不同的环境(输入参数),创建不同用途的对象。(一般这些对象都是实现了相同的解耦或继承于同一基类)

应用

JDBC:      Connection、DataSource

MyBatis:   SQLSessionFactory

Hibernate: SessionFactory

  [ 数据库表和对象的映射关系写入XML格式的配置文件,然后由SessionFactory来创建Session ]

JDBC:

MyBatis:

Hibernate:


The Abstract Factory Pattern   抽象工厂

 

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们的具体的类。

适用性:1.一个系统要独立于它的产品的创建、组合和表示时。

              2.一个系统要用多个产品系列中的一个来配置时。

              3.要强调一系列相关的产品对象的设计以便进行联合使用时

              4.提供一个产品类库,而只想显示它们的接口而不是实现时

效果:1.由工厂封装产品对象的创建,将客户与类 的实现分离

           2.易于交换产品系列

           3.有利于产品的一致性

实现:1.通常可将工厂作为单例Singleton

           2.Abstract Factory 声明创建产品的接口,由工厂子类负责创建产品,通常为每个产品定义一个工厂方法。

            3.一种更灵活但不太安全的设计是以参数方式创建对象。

场景
创建Factory的Abstract Factory

应用

DataSource:EJB容器


The Singleton Pattern  单例模式

 

意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点

适用:1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时

           2.当这个唯一实例应该是通过子类话可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例

场景
系统的对象:有且只能有一个实例。
应用

Java:System、Runtime和Math类

MyBatis:

Hibernate:

MyBatis:

public class MyBatisUtils {

    //static 非面向对象的关键字
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            // 得到工厂
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSession(){
        return sqlSessionFactory.openSession();
    }

}

Hibernate:

public class HibernateUtils {

    private static SessionFactory sessionFactory;
    static {
        //加载Hibernate的核心配置文件,核心配置自己已经关联的ORM因映射文件。
        Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
        //得到工厂
        sessionFactory = configuration.buildSessionFactory();
    }
    //获取session方式一
    public static Session openSession(){
        return sessionFactory.openSession();
    }
    //获取session方式二
    public static Session currentSession(){//这种方式必须配置session绑定到本地线程
        return sessionFactory.getCurrentSession();
    }

}

实现:

(1)Static Classes

(2)Factory                  对象的创建

          Abstract Factory   实现


总结

Creational Patterns

Factory                          屏蔽对象的创建逻辑,根据输入的数据从相似的类中选择和返回相应类的实例

Abstract Factory            生成Factory

The Singleton Pattern    确保类有且只有一个实例:并使其能全局访问

Prototype


补充   2018/08/27

三种Factory模式

简单工厂模式Simple Factory

       专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类

工厂方法模式Factory Method

      将对象的创建交由父类中定义的一个标准方法来完成,而不是其构造函数,究竟应该创建何种对象由具体的子类负责决定

抽象工厂模式Abstract Factory

      提供一个共同的接口来创建相互关联的多个对象
工厂方法模式Factory Method

类创建型模式

意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

适用:1.当一个类不知道它所必须创建的对象的类的时候

          2.当一个类希望由它的子类来指定它所创建的对象的时候

          3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类实代理者这一信息局部化的时候。

效果:1.用工厂方法在类中创建对象比直接创建更灵活,子类可以提供对象的扩展版本。

         2.连接平行的类层次,将哪些类应一同工作的信息局部化

实现:1.Creator可以只声明工厂方法,也可以提供缺省的实现。

         2.可以使用模板以避免创建子类

         3.可以柴勇适当的命名约定说明正在使用工厂方法

猜你喜欢

转载自blog.csdn.net/ddhmbbklyk2018/article/details/81876435