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: Hibernate: |
实现: (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.可以柴勇适当的命名约定说明正在使用工厂方法 |