一、Factory Method

基本概念

FactoryMethod是一种创建性模式,它定义了一个创建对象的接口,但是却让子类来决定具体实例化哪一个类.当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定创建的对象时我们就需要用到Factory Method 模式了.简单说来,Factory Method可以根据不同的条件产生不同的实例,当然这些不同的实例通常是属于相同的类型,具有共同的父类.Factory Method把创建这些实例的具体过程封装起来了,简化了客户端的应用,也改善了程序的扩展性,使得将来可以做最小的改动就可以加入新的待创建的类. 通常我们将Factory Method作为一种标准的创建对象的方法,当发现需要更多的灵活性的时候,就开始考虑向其它创建型模式转化

简单分析

图1是Factory Method 模式的结构图,这里提供了一些术语,让我们可以进行更方便的描述:

  1. Product: 需要创建的产品的抽象类.
  2. ConcreteProduct: Product的子类,一系列具体的产品.
  3. Creator: 抽象创建器接口,声明返回Product类型对象的Factory Method.
  4. ConcreteCreator: 具体的创建器,重写Creator中的Factory Method,返回ConcreteProduct类型的实例.

图1: Factory Method 模式结构

由此可以清楚的看出这样的平行对应关系: Product <====> Creator ; ConreteProduct <====> ConreteCreator

抽象产品对应抽象创建器,具体产品对应具体创建器.这样做的好处是什么呢?为什么我们不直接用具体的产品和具体的创建器完成需求呢?实际上我们也可以这样做.但通过Factory Method模式来完成,客户(client)只需引用抽象的Product和Creater,对具体的ConcreteProduct和ConcreteCreator可以毫不关心,这样做我们可以获得额外的好处:

  • 首先客户端可以统一从抽象创建器获取产生的实例,Creator的作用将client和产品创建过程分离开来,客户不用操心返回的是那一个具体的产品,也不用关心这些产品是如何创建的.同时,ConcreteProduct也被隐藏在Product后面,ConreteProduct继承了Product的所有属性,并实现了Product中定义的抽象方法,按照Java中的对象造型(cast)原则,通过ConcreteCreator产生的ConcreteProduct可以自动的上溯造型成Product.这样一来,实质内容不同的ConcreteProduct就可以在形式上统一为Product,通过Creator提供给client来访问.
  • 其次,当我们添加一个新的ConcreteCreator时,由于Creator所提供的接口不变,客户端程序不会有丝毫的改动,不会带来动一发而牵全身的灾难, 这就是良好封装性的体现.但如果直接用ConcreteProduct和ConcreteCreator两个类是无论如何也做不到这点的. 优良的面向对象设计鼓励使用封装(encapsulation)和委托(delegation),而Factory Method模式就是使用了封装和委托的典型例子,这里封装是通过抽象创建器Creator来体现的,而委托则是通过抽象创建器把创建对象的责任完全交给具体创建器ConcreteCreator来体现的.

二、Singleton Method

  • 定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
  • 实现:私有静态成员变量,存放实例;私有构造方法,防止new实例;公共静态方法,创建或返回私有静态成员变量存放的实例
  • 懒汉模式:工厂方法时实例对象,运行时实例
  • 饿汉模式:私有静态成员变量直接赋值,编译直接实例对象
  • 单例模式是一种对象创建型模式。

优缺点

java design patter相关推荐

  1. java design按钮_DesignJava 设计模式,讲述 的各种 方便在项目中进行 框架结构 Develop 238万源代码下载- www.pudn.com...

    文件名称: DesignJava下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 1675 KB 上传时间: 2013-11-21 下载次数: 2 提 供 者: 1 ...

  2. Design Patter

    23种经典的Golf设计模式 Java Design Pattern Spring中的设计模式 http://www.uml.org.cn/j2ee/201301074.asp 转载于:https:/ ...

  3. Java EE Design Patter

    设计模式代表了经验丰富的面向对象软件开发人员使用的最佳实践.设计模式是软件开发人员在软件开发过程中遇到的一般问题的解决方案,这些解决方案是在相当长的一段时间内由众多软件开发人员通过反复试验获得的. 什 ...

  4. 工厂模式(Factory Design Patter)

    什么是工厂模式? 定义一:Define an interface for creating an object, but let subclasses decide which class to in ...

  5. java Design Patterns

    java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式. 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模 ...

  6. java design pattern

    工厂模式(factory) 简单工厂模式的概念 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承 ...

  7. Java设计模式(java design patterns)

    目录 一.Java设计模式 1.概述 2 .优点 3.java设计模式类型 1.单例模式(Singleton) (1)懒汉式单例 (2)饿汉式单例 2.工厂模式(Factory Pattern ) 定 ...

  8. java正则表达式Patter和Matcher的使用

    结论:Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持. 单独用Pattern只能使用Pattern.matcher(String ...

  9. JavaEE Design Patter(2)

    一.Factory 工厂模式:主要分为三种模式: 定义:在基类中定义创建对象的一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟到子类中进行. 为什么要使用工厂模式: (1) 解耦 :把对 ...

最新文章

  1. 使用python创建自己的第一个神经网络模型吧!
  2. 常用javascript函数
  3. ActivityManagerService知识点
  4. 多线程:线程池里的队列BlockingQueue
  5. python中类的属性一般来说_python中实例属性和类属性之间的关系
  6. 「老家」山西凤凰城,说话饮食都像极了西安,人称“最不像山西的城市”
  7. 遍历一个List的几种方法
  8. Layui富文本编辑器,文章编辑器
  9. php laravel 开发工具,Laravel 文档工具
  10. TP6自定义分页样式
  11. android11 rom,第一个Android 11的第三方ROM来了,适用于红米K20 Pro
  12. 谷歌浏览器弹出窗口html代码,谷歌浏览器显示通知消息JS代码
  13. 机器人编程教育培养孩子综合能力
  14. android paint 圆角 绘制_android 绘制椭圆 圆角矩形 详细解析
  15. this.name=name
  16. PostMan接口参数化、接口返回值传递
  17. SQL反模式:实体-属性-值(EAV)问题(二)
  18. 系统设定工具(网络、打印机)与硬件侦测
  19. 经典四大排序(动图实现)
  20. 不合格高校教师的自我总结(机器人教学和工作小结)

热门文章

  1. wxpython初学者(四)之 事件驱动
  2. 【Python从入门到进阶】21、爬虫相关概念介绍
  3. 优图、音视频实验室之后,腾讯SNG量子实验室也浮出水面
  4. 刷机介绍----超详细
  5. 苦逼的一天!从周一开始
  6. Git 如何合并commits成一个(squash)
  7. BlueTeam--威胁情报介绍
  8. SQL 插入数据和查询
  9. 基于XGBOOST模型预测货物运输耗时 - Part 2 通过方差分析了解文本型变量与数值型目标变量的关系
  10. Dubbo Invoker