设计模式 -- Abstract Factory 抽象工厂
1、常规的对象创建方法
//创建一个Road对象
Road road=new Road();
new的问题:实现依赖,不能应对“具体实例化类型”额变化。
解决思想:
封装变化点--哪里变化,封装哪里(如果没有变化,当然不需要额外的封装)。
2、工厂模式的缘起
变化点在“对象创建”,因此就封装“对象创建”
面向接口编程--依赖接口,而非依赖实现
解决方法: 类库
class RoadFactory{
public static Road CreateRoad()
{
return newRoad();
}
}
//创建一个Road对象 客户程序
Road road=roadFactory.CreateRoad();
3、游戏开发场景。我们需要构建“道路”,房屋,地道,丛林。。。等等对象。
创建一系列对象(相互依赖的)
Road road=roadFactory.CreateRoad()
.............[相对稳定]
class RoadFactory{
public static Road CreatRoad
{
return new Road(); //如果需求变化了,这里就成了变化点了
}
public static Building CreatBuilding {
return new Building();
}
public static Tunnel CreatTunnel
{
return new Tunnel();
}
public static Jumgle CreatJumgle
{
return new Jumgle();
}
}
4、简单工厂的问题
不能应对“不同系列对象”的变化,
静态方法工厂这里成了变化点。比如有不同风格的游戏场景--对应不同的道路、房屋、地道。
解决方法:抽象封装、
5、动机
在软件系统中,惊颤面临着“一系列相互依赖的对象”的创建工作;同事,由于需求的变化,往往在更多系类对象的创建工作。
如果对应这种变化?如何绕过常规的对象创建方法(new),提供一种封装机制来避免客户程序和这种多系列具体对象创建工作的紧耦合。
6、意图
提供一个接口,让该接口负责创建一系列相关或者相互依赖的对象,无需制定他们具体的类
----(设计模式)GOF
7、结构(Structre)

设计模式 -- Abstract Factory 抽象工厂的更多相关文章
- 一天一个设计模式——Abstract Factory抽象工厂模式
一.模式说明 前面学习了工厂方法(Factory Method)模式.在工厂方法模式中,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类,具体的处理交由子类来处理.这里学习的抽象工厂 ...
- 2.设计模式-Abstract Factory 抽象工厂模式
大神勿喷,不对的地方请指出来,学笔记而已. 解决的问题:应对多系列对象构建的变化或多系列(例如:崎岖的山路和平坦的马路属于一个系列) 不断的变化的创建. 使用场景:对象不变(比如有3个对象 " ...
- 设计模式02: Abstract Factory 抽象工厂(创建型模式)
Abstract Factory 抽象工厂(创建型模式) 常见的对象创建方法: //创建一个Road对象 Road road=new Road(); new的问题: -实现依赖 ...
- 设计模式(一): abstract factory抽象工厂模式 -- 创建型模式
1.定义 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 2.适用场景 1.一个系统要独立于它的产品创建.组合和表示. 2.一个系统要由多个产品系列中的一个来配置. 3.当你要 ...
- c++ 设计模式9 (Abstract Factory 抽象工厂模式)
5.2 抽象工厂模式 动机:在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时,由于需求的变化,往往存在更多系列对象的创建工作. 代码示例: 实现利用数据库的业务逻辑,支持多数据库(Sq ...
- Java设计模式:Abstract Factory(抽象工厂)模式
概念定义 抽象工厂(Abstract Factory)模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式中,系统的产品有多于一个的产品族(一个产品族里定义多个产品) ...
- 面向对象设计模式纵横谈:Abstract Factory 抽象工厂模式(笔记记录)
今天是设计模式的第二讲,抽象工厂的设计模式,我们还是延续老办法,一步一步的.演变的来讲,先来看看一个对象创建的问题. 1.如何创建一个对象 常规的对象创建方法: 这样的创建对象没有任何问题, ...
- Abstract Factory 抽象工厂(创建型模式)
1.常规的对象创建方法(以更换QQ空间主题为例) (这里的常规对象指的是由于业务需求,当前实例化的对象有可能被其他相似的对象(有着共同的特性)所取代,例如更换手机铃声:一首歌取代另一首歌(词,曲,和声 ...
- 对象创建型模式------Abstract Factory(抽象工厂)
1. 意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.2. 别名 Kit3. 动机 假设我们要开发一款游戏,当然为了吸引更多的人玩,游戏难度不能太大 ...
随机推荐
- Oracle学习(18)【DBA向】:分布式数据库
分布式数据库 什么是分布数据库? l数据物理上被存放在网络的多个节点上,逻辑上是一个总体. 分布式数据库的独立性 l分布数据的独立性指用户不必关心数据怎样切割和存储,仅仅需关心他须要什么数据. Ora ...
- 亿部书城李柯毅:Testin云測可大幅提升产品质量 值得推荐!
亿部书城李柯毅:Testin云測可大幅提升产品质量 值得推荐! 2014/10/13 · Testin · 开发人员訪谈 成立于2010年的亿部书城.其主营业务为移动增值业务及数字出版业务,由中央部委 ...
- Django值中间件
1,还是那句话:写代码的逻辑遵循:简洁,重复性高,可维护性高 1.1>中间件:中间件是一种用来处理Django的请求和响应的框架级别的钩子.它是一个轻量,低级别的插件系统,用于在全局范围内改变D ...
- 可以声明接口,但不可以new接口
接口是一种特殊的抽象类,它包含常量和方法的声明,但没有方法的实现:可以把接口看成是一种特殊的抽象类: 接口实质上是一种规范,它关心的是"做什么",不关心"怎样做" ...
- linux losetup
1 losetup命令的通用格式 losetup loopdev file loopdev可以看出时一个仿真设备,它本身是没有存储空间的,这个命令的作用就是将file作为它的存储空间. 一旦连接成功, ...
- HttpServlet容器响应Web客户流程
HttpServlet容器响应Web客户请求流程如下: 1)Web客户向Servlet容器发出Http请求: 2)Servlet容器解析Web客户的Http请求: 3)Servlet容器创建一个Htt ...
- 在myeclipse中拷贝一个工程,修改部署的名字
在MyEclipse中,经常练习的时候需要建立多个工程,但是为了方便,通常的作法是:复制一个工程,然后直接粘贴,但是,部署以后会发现,使用新的工程名访问不了,报404错误. 其原因是没有修改W ...
- camera摄像原理之四:曝光和GAMMA
GAMMA:输出/输入(光信号值) 从最明亮到最黑暗,假设人眼能够看到一定的范围,那么胶片(或CCD 等电子感光器件)所能表现的远比人眼看到的范围小的多,而这个有限的范围就是感光宽容度. 人眼的感光宽 ...
- 【HDU 1520】 Anniversary Party
[题目链接] 点击打开链接 [算法] 树形DP 令f[i][0]表示 : 以i为根的子树中,若i不参加宴会,所能获得的最大愉悦值 f[i][1]表示 : 以i为根的子树中,若i参加宴会,所能获得的最大 ...
- 动态点分治入门 ZJOI2007 捉迷藏
传送门 这道题好神奇啊……如果要是不带修改的话那就是普通的点分治了,每次维护子树中距离次大值和最大值去更新. 不过这题要修改,而且还改500000次,总不能每改一次都点分治一次吧. 所以我们来认识一个 ...