设计模式——(Abstract Factory)抽象工厂
设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。你必须设计相关类,并设计类的接口和继承之间的关系。设计必须可以解决当前问题,同时必须对将来可能发生的问题和需求也有足够的针对性。掌握面向对象的设计模式,可以比较轻松的解决上述问题。
本篇文章主要讲解设计模式中最基本,也是最常用的(Abstract Factory)抽象工厂。
适用性:
在以下情况可以使用Abstract Factory模式
• 一个系统要独立于它的产品的创建、组合和表示时。
• 一个系统要由多个产品系列中的一个来配置时。
• 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
• 当你提供一个产品类库,而只想显示它们的接口而不是实现时。
举个例子讲解一下Abstract Factory主要应用场景。我们试想一下一辆轿车的制造过程,在最初学习面向对象编程时,我们会定义一个轿车类,里面封装了轿车的一系列属性,并且由轿车类自己将自己初始化。显然这样做足以应付当前需求,但是在将来的某一天我们需要设计一辆卡车呢?我们是不是必须再定义一个卡车类呢?这显然不符合可复用的软件设计思想。在面向对象的软件设计模式中,我们充分分析轿车和卡车的属性,抽象出一个公共的父类,并由轿车和卡车继承,再定义一个Factory类来实例化轿车和卡车。采用这样的设计模式,将来在增加自行车,摩托车等等只需定义它们的属性即可,它们的初始化过程不需要重新定义。
结构:

下面我对上面问题进行一下具体讲解:
首先我们定义公共父类Vehicle:应为Vehicle 不需要实例化所以定义为抽象类。
定义轿车类Car继承Vehicle
定义卡车类Truck继承Vehicle
它们之间的继承关系如下:

定义VehicleFactory类 初始化 轿车或卡车对象:
Abstract Factory模式有下面的一些优点和缺点:
1) 它分离了具体的类:
Abstract Factory模式帮助你控制一个应用创建的对象的类。
2) 它使得易于交换产品系列
一个具体工厂类在一个应用中仅出现一次—即在它初始化的时候。
3) 它有利于产品的一致性
当一个系列中的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象,这一点很重要。而Abstract Factory很容易实现这一点。
4) 难以支持新种类的产品
难以扩展抽象工厂以生产新种类的产品。
经过上面的讲解不知道大家对(Abstract Factroy)抽象工厂的模式设计是否有所了解呢?如果有什么地方看不懂的话可以与我联系。
~蒋继发
QQ:2584451009
设计模式——(Abstract Factory)抽象工厂的更多相关文章
- 一天一个设计模式——Abstract Factory抽象工厂模式
一.模式说明 前面学习了工厂方法(Factory Method)模式.在工厂方法模式中,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类,具体的处理交由子类来处理.这里学习的抽象工厂 ...
- 设计模式 -- Abstract Factory 抽象工厂
1.常规的对象创建方法 //创建一个Road对象 Road road=new Road(); new的问题:实现依赖,不能应对“具体实例化类型”额变化. 解决思想: 封装变化点--哪里变化,封装哪里( ...
- 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. 动机 假设我们要开发一款游戏,当然为了吸引更多的人玩,游戏难度不能太大 ...
随机推荐
- DBUtils的使用
DButils是apache旗下Commons项目中的一个JDBC工具包,它可以为帮助我们简化对JDBC的操作,但它并不是一个ORM框架,只是可以为我们执行sql,并将返回的ResultSet转化成我 ...
- asp.net [AjaxMethod]
AjaxPro.2.dll cs 代码 using AjaxPro; Utility.RegisterTypeForAjax(typeof(BOMdr_KT)); [Ajax.AjaxMethod() ...
- c# 自定义数据类型
定义引用类型用 class ,值类型 用 struct ,涉及数据转换就用 上一篇的方法做 ,涉及 泛型就用 in 关键字 不用 in interface IContravariant<A& ...
- javascritpt 原型链
// 基类 var BaseCalculator = function(){ this.decimalDigits = 2; }; // public BaseCalculator.prototype ...
- 高性能双端js模板---simplite
simplite是一款js实现的模板引擎,它能够完成浏览器端js模版和node服务器端js模板的数据渲染,渲染性能达到引擎的极限. 渲染性能十分突出. 支持浏览器端和node服务器端模板渲染. 它简单 ...
- PHP开发API接口及使用
服务端 <?php require 'conn.php'; header('Content-Type:text/html;charset=utf-8'); $action = $_GET['ac ...
- sb2-admin
近期开发中遇到的问题总结 最近准备把后台管理系统重新设计开发下,使用了bootstrap,在网上找了个漂亮的后台模板:sb2-admin,在使用中遇到了不少问题,总结下,以免以后忘记. 1.EF5 ...
- 多线程下HashMap的死循环是如何产生的
前言 HashMap不是线程安全的,如果需要在多线程环境中使用Map,那么我们可以使用ConcurrentHashmap. 1.举例说明: package com.test; import java. ...
- PhpStorm创建Drupal模块项目开发教程(5)
Drupal项目开发中,问题跟踪器的设置,可以保证信息的交互.是开发中,不可或缺的部分. 接下来,就PhpStorm IDE中,问题跟踪器集成的配置操作就行图文解说. Settings | Tasks ...
- 使用vsnprintf后链接错误及解决方法
/home/merlin/swinstall/MentorGraphics/Sourcery_CodeBench_Lite_for_ARM_EABI/bin/../lib//../../../../a ...