当前位置: 首页 > news >正文

模式--创建型

创建型
  • Abstract Factory(抽象工厂模式)
  • Builder(生成器模式)
  • Factory Method(工厂模式)
  • Singleton(单件模式)
  • Prototype(原型模式)

 

名  称

Abstract Factory(

抽象工厂模式

意  图

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

适  用

环  境

一个系统要独立于它的产品的创建、组合和表示时。

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

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

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

结  构

image001.jpg

名  称

Builder(

生成器模式

意  图

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

适  用

环  境

当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

当构造过程必须允许被构造的对象有不同的表示时。

结  构

image002.jpg

协  作

关  系

image003.gif

名  称

Factory Method(

工厂模式

意  图

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

适  用

环  境

当一个类不知道它所必须创建的对象的类的时候。

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

当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类

是代理者这一信息局部化的时候。

结  构

image004.gif


名  称

Singleton(

单件模式

意  图

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

适  用

环  境

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

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

结  构

image005.gif


名  称

Prototype(

原型模式

意  图

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

适  用

环  境

当一个系统应该独立于它的产品创建、构成和表示时,要使用Prototype模式;以及:

当要实例化的类是在运行时刻指定时,例如,通过动态装载;或者为了避免创建一个与产品类层次平行的工厂类层次时;或者 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们

可能比每次用合适的状态手工实例化该类更方便一些。

结  构

image006.gif


本文转自kenty博客园博客,原文链接http://www.cnblogs.com/kentyshang/archive/2006/06/12/423992.html如需转载请自行联系原作者

kenty

相关文章:

  • Just for fun——迅速写完快速排序
  • 十六进制之间的转换(二进制、八进制、十六进制、十进制)
  • php7.1.1一键安装/配置文件简单优化
  • Office 365中管理员角色介绍-进阶篇
  • SQL Server-表表达式基础
  • Oracle 11g RAC 故障之--Instance 启动失败
  • Nginx基于用户名和密码的访问控制
  • VS2005和ASP.NET2.0中使用强类型数据
  • HTML 简介
  • 开机取消按Ctrl+Alt+Del键
  • Android录制视频报错setVideoSize called in a invalid state 1
  • android自动化测试中hierarchyviewer和uiautomatorviewer获取控件信息的方式比对(1)
  • android89 服务service
  • 阿里云服务器使用之一:搭建jsp服务器
  • 安装 virtualenv
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【翻译】babel对TC39装饰器草案的实现
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • CEF与代理
  • co模块的前端实现
  • dva中组件的懒加载
  • golang中接口赋值与方法集
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • OSS Web直传 (文件图片)
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python - 闭包Closure
  • python 装饰器(一)
  • python学习笔记-类对象的信息
  • vue的全局变量和全局拦截请求器
  • 半理解系列--Promise的进化史
  • 笨办法学C 练习34:动态数组
  • 每天一个设计模式之命令模式
  • 通过npm或yarn自动生成vue组件
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 因为阿里,他们成了“杭漂”
  • 用element的upload组件实现多图片上传和压缩
  • 在Unity中实现一个简单的消息管理器
  • 怎么把视频里的音乐提取出来
  • 阿里云重庆大学大数据训练营落地分享
  • 第二十章:异步和文件I/O.(二十三)
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (145)光线追踪距离场柔和阴影
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (k8s中)docker netty OOM问题记录
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (分布式缓存)Redis分片集群
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (全注解开发)学习Spring-MVC的第三天
  • (一)Java算法:二分查找
  • (一)认识微服务
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)菜鸟学数据库(三)——存储过程
  • .equals()到底是什么意思?