设计模式之笔记--抽象工厂模式(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 ...
随机推荐
- 前端基础:HTML标签(上)
前端基础:THML HTML初始 1.web服务本质 import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) so ...
- select模型的原理、优点、缺点
关于I/O多路复用: I/O多路复用(又被称为“事件驱动”),首先要理解的是,操作系统为你提供了一个功能,当你的某个socket可读或者可写的时候,它可以给你一 个通知.这样当配合非阻塞的socket ...
- javascript中面向对象的5种写法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- CSS3 transform rotate(旋转)锯齿/元素抖动模糊的解决办法
使用CSS3 3D transforms,通过GPU来渲染,能有效的起到抗锯齿效果.只要在CSS3 transform属性中加入translateZ(0).例:-webkit-transform: r ...
- [BZOJ4589]Hard Nim
description BZOJ 题意:\(n\)堆式子,每堆石子数量为\(\le m\)的质数,对于每一个局面玩\(Nim\)游戏,求后手必胜的方案数. data range \[n\le 10^9 ...
- HDU 2083(排序+绝对值+中间值求和)
简易版之最短距离 点我跳转到HDOJ Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- pandas模块(数据分析)------Series
pandas是一个强大的Python数据分析的工具包. pandas是基于NumPy构建的. pandas的主要功能: 具备对其功能的数据结构DataFrame.Series 集成时间序列功能 提供丰 ...
- c++ linux 判断string是中文的 or 英文的 字符串。
#include <iostream> #include <string.h> #include <stdio.h> #include <stdlib.h&g ...
- java访问Https服务的客户端示例
关于证书 1.每个人都可以使用一些证书生成工具为自己的https站点生成证书(比如JDK的keytool),大家称它为“自签名证书”,但是自己生成的证书是不被浏览器承认的,所以浏览器会报安全提示,要求 ...
- responseBody注解可以直接返回字符串 && springMVC Controller get请求返回字符串是中文乱码解决
//获取商品描述信息(html片段)字符串返回给前台填充html @RequestMapping(value="/item/desc/{itemId}",produces=Medi ...