设计模式之笔记--抽象工厂模式(Abstract Factory)
抽象工厂模式(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)的更多相关文章
- 设计模式学习心得<抽象工厂模式 Abstract Factory>
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...
- Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...
- IOS设计模式浅析之抽象工厂模式(Abstract Factory)
概述 在前面两章中,分别介绍了简单工厂模式和工厂方法模式,我们知道简单工厂模式的优点是去除了客户端与具体产品的依赖,缺点是违反了“开放-关闭原则”:工厂方法模式克服了简单工厂模式的缺点,将产品的创建工 ...
- 《JAVA设计模式》之抽象工厂模式(Abstract Factory)
场景问题 举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选择一系列的配件,比如CPU.硬盘.内存.主板.电源.机箱等.为讨论使用简单点,只考虑选择CPU和主板的问题. 事实上,在选择 ...
- 设计模式 笔记 抽象工厂模式 Abstract Factory
//---------------------------15/04/09---------------------------- //Abstract Factory 抽象工厂----对象创建型模式 ...
- 学习笔记——抽象工厂模式Abstract Factory
在工厂模式的基础上,通过为工厂类增加接口,实现其他产品的生产,而不用一类产品就增加一个工厂. 依然以<真菌世界>游戏故事类比,树作为工厂,如果现在有两类树,一类生产快速弄真菌飞机和20毫米 ...
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...
- 【设计模式】抽象工厂模式 Abstract Factory Pattern
简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...
- .NET设计模式(2):1.2 抽象工厂模式(Abstract Factory)
概述 抽象工厂模式(Abstract Factory)是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口 ...
- 设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释
抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2709 ...
随机推荐
- kaptcha验证码在windows下正常,在linux下无法显示
有几种情况,记录备忘: 1.两个环境字体不一样,linux环境下可能没有字体,重新安装字体即可. 2.tomcat等容器下没有temp目录,手动建立即可. 3.如果报找不到类的错误,检查JDK是否正确 ...
- POJ1279:Art Gallery——题解
http://poj.org/problem?id=1279 题目大意:给按照顺时针序的多边形顶点,问其内核可行区域面积. —————————————————————————————— 终于变了一点… ...
- SpringBoot-配置文件属性注入-3种方式
配置文件: datasource.username = admin datasource.url = /hello/world 方式一: @Value 前提: <!-- JavaBean处理工具 ...
- [codeforces/edu4]总结(F)
链接:http://codeforces.com/contest/612/ A题: 枚举切多少个p,看剩下的能否整除q. B题: 从1到n模拟一下,累加移动的距离. C题: 先用括号匹配的思路看是否有 ...
- C++虚基类的初始化
#include<iostream> using namespace std; class Base{ public: Base(int sa) { a=sa; cout<<& ...
- Leetcode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复
1.题目描述 设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构. 注意: 允许出现重复元素. insert(val):向集合中插入元素 val. remove(val):当 va ...
- 一个JAVA题引发的思考
转载自:http://www.cnblogs.com/heshan664754022/archive/2013/03/24/2979495.html 十年半山 今天在论坛闲逛的时候发现了一个很有趣的题 ...
- SPOJ 104 HIGH - Highways
HIGH - Highways http://www.spoj.com/problems/HIGH/ In some countries building highways takes a lot o ...
- [Luogu 2604] ZJOI2010 网络扩容
[Luogu 2604] ZJOI2010 网络扩容 第一问直接最大流. 第二问,添加一遍带费用的边,边权 INF,超级源点连源点一条容量为 \(k\) 的边来限流,跑费用流. 大约是第一次用 nam ...
- 【Codeforces370E】Summer Reading [构造]
Summer Reading Time Limit: 20 Sec Memory Limit: 512 MB Description Input Output Sample Input 7 0 1 ...