抽象工厂模式(Abstract Factory)

定义

抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

类图

描述

多个抽象产品类,每个抽象产品类可以派生出多个具体产品类;
一个抽象工厂类,可以派生出多个具体工厂类;
每个具体工厂可以创建多个具体产品,即每个工厂可以生产一个产品集合。

应用场景

轿车是由发动机、车轮、车体结构、方向盘等部件组成的,现在要生产一辆轿车,就需要把各个部件抽象出来单独封装,再由汽车工厂来组装轿车。

    /// <summary>
/// 发动机接口
/// </summary>
public interface IEngine
{
void Install();
} /// <summary>
/// 奥迪发动机
/// </summary>
public class AudiEngine : IEngine
{
public void Install()
{
Console.WriteLine("安装奥迪的发动机.");
}
} /// <summary>
/// 奔驰发动机
/// </summary>
public class BenzEngine : IEngine
{
public void Install()
{
Console.WriteLine("安装奔驰的发动机.");
}
} /// <summary>
/// 车轮接口
/// </summary>
public interface IWheel
{
void InstallLeftFrontWheel();
void InstallRightFrontWheel();
void InstallLeftBackWheel();
void InstallRightBackWheel();
} /// <summary>
/// 奥迪车轮
/// </summary>
public class AudiWheel : IWheel
{
public void InstallLeftFrontWheel()
{
Console.WriteLine("安装奥迪的左前车轮.");
} public void InstallRightFrontWheel()
{
Console.WriteLine("安装奥迪的右前车轮.");
} public void InstallLeftBackWheel()
{
Console.WriteLine("安装奥迪的左后车轮.");
} public void InstallRightBackWheel()
{
Console.WriteLine("安装奥迪的右后车轮.");
}
} /// <summary>
/// 奔驰车轮
/// </summary>
public class BenzWheel : IWheel
{
public void InstallLeftFrontWheel()
{
Console.WriteLine("安装奔驰的左前车轮.");
} public void InstallRightFrontWheel()
{
Console.WriteLine("安装奔驰的右前车轮.");
} public void InstallLeftBackWheel()
{
Console.WriteLine("安装奔驰的左后车轮.");
} public void InstallRightBackWheel()
{
Console.WriteLine("安装奔驰的右后车轮.");
}
} /// <summary>
/// 车体结构接口
/// </summary>
public interface IBody
{
void Install();
} /// <summary>
/// 奥迪的车体结构
/// </summary>
public class AudiBody : IBody
{
public void Install()
{
Console.WriteLine("安装奥迪的车身结构.");
}
} /// <summary>
/// 奔驰的车体结构
/// </summary>
public class BenzBody : IBody
{
public void Install()
{
Console.WriteLine("安装奔驰的车身结构.");
}
} /// <summary>
/// 汽车工厂接口
/// </summary>
public interface ICarFactory
{
IBody CreateBody();
IEngine CreateEngine();
IWheel CreateWheel();
} /// <summary>
/// 具体的奥迪工厂类
/// </summary>
public class AudiFactory : ICarFactory
{
public IEngine CreateEngine()
{
return new AudiEngine();
} public IWheel CreateWheel()
{
return new AudiWheel();
} public IBody CreateBody()
{
return new AudiBody();
}
} /// <summary>
/// 具体的奔驰工厂类
/// </summary>
public class BenzFactory : ICarFactory
{
public IEngine CreateEngine()
{
return new BenzEngine();
} public IWheel CreateWheel()
{
return new BenzWheel();
} public IBody CreateBody()
{
return new BenzBody();
}
}

设计模式之笔记--抽象工厂模式(Abstract Factory)的更多相关文章

  1. 设计模式学习心得<抽象工厂模式 Abstract Factory>

    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...

  2. Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)

    一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...

  3. IOS设计模式浅析之抽象工厂模式(Abstract Factory)

    概述 在前面两章中,分别介绍了简单工厂模式和工厂方法模式,我们知道简单工厂模式的优点是去除了客户端与具体产品的依赖,缺点是违反了“开放-关闭原则”:工厂方法模式克服了简单工厂模式的缺点,将产品的创建工 ...

  4. 《JAVA设计模式》之抽象工厂模式(Abstract Factory)

    场景问题 举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选择一系列的配件,比如CPU.硬盘.内存.主板.电源.机箱等.为讨论使用简单点,只考虑选择CPU和主板的问题. 事实上,在选择 ...

  5. 设计模式 笔记 抽象工厂模式 Abstract Factory

    //---------------------------15/04/09---------------------------- //Abstract Factory 抽象工厂----对象创建型模式 ...

  6. 学习笔记——抽象工厂模式Abstract Factory

    在工厂模式的基础上,通过为工厂类增加接口,实现其他产品的生产,而不用一类产品就增加一个工厂. 依然以<真菌世界>游戏故事类比,树作为工厂,如果现在有两类树,一类生产快速弄真菌飞机和20毫米 ...

  7. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...

  8. 【设计模式】抽象工厂模式 Abstract Factory Pattern

    简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...

  9. .NET设计模式(2):1.2 抽象工厂模式(Abstract Factory)

    概述 抽象工厂模式(Abstract Factory)是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口 ...

  10. 设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释

    抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2709 ...

随机推荐

  1. WIN7系统插入蓝牙适配器经常断开问题

    WIN7 ACER笔记本一台,蓝牙耳机一个,10块钱的蓝牙适配器一个 目的:可以在笔记本上用适配器与蓝牙耳机匹配 出现问题:1.有2个图标,一会左边感叹号,一会右边感叹号,必须有个存在感叹号 解决:第 ...

  2. POJ1061:青蛙的约会——题解

    http://poj.org/problem?id=1061 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定 ...

  3. UOJ228:基础数据结构练习题——题解

    http://uoj.ac/problem/228 参考:https://www.cnblogs.com/ljh2000-jump/p/6357583.html 考虑当整个区间的最大值开方==最小值开 ...

  4. 洛谷 P2323 [HNOI2006]公路修建问题 解题报告

    P2323 [HNOI2006]公路修建问题 题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 思路: 二分答案 然后把每条能加的大边都加上,然后加小边 但在洛谷的题 ...

  5. UVA.129 Krypton Factor (搜索+暴力)

    UVA.129 Krypton Factor (搜索+暴力) 题意分析 搜索的策略是:优先找长串,若长串不合法,则回溯,继续找到合法串,直到找到所求合法串的编号,输出即可. 注意的地方就是合法串的判断 ...

  6. 信息工程学院技能大赛 计算机程序设计(Java)大赛试题

    前期准备与后期上传工作: (1)必须先建立项目和包,项目名为"JavaContest",包结构为:"contest.c+序号+姓名",其中序号为两位为本人大赛报 ...

  7. POJ1742 Coins(男人八题之一)

    前言 大名鼎鼎的男人八题,终于见识了... 题面 http://poj.org/problem?id=1742 分析 § 1 多重背包 这很显然是一个完全背包问题,考虑转移方程: DP[i][j]表示 ...

  8. 基于jquery的扩展写法

    (function($){ $.fn.aa = function(canshu){ html = $(this).text(); alert(html) }})(jQuery); (function( ...

  9. Using CORS(译)

    原文地址:https://docs.webplatform.org/wiki/tutorials/using_cors 总结 一篇对"Cross Origin Resource Sharin ...

  10. HDU1540 区间合并

    Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...