第三课 创建型模式 第三节 抽象工厂模式(Abstract Factory Pattern)
来源:互联网 发布:燕十八知乎 编辑:程序博客网 时间:2024/04/26 08:24
昨天、今天我学习了抽象工厂设计模式,呵呵。今天做一下学习笔记。主要学习资料来源:《大话设计模式》、云涛的博客
依照惯例先记录一下抽象工厂模式的定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类,注意是一组,也就是说创建的至少是一个对象,我的理解为创建一个产品族对象提供一个接口。
产品族:位于不同产品等级结构中,功能相关联的产品组成的集合。抽象工厂模式提供的一系列产品就是一个产品族。
产品等级结构:相同结构的产品,通常表现为一个产品接口或产品的抽象类。
抽象工厂模式和工厂方法模式的区别:工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。工厂方法模式中的工厂接口提供的方法是创建一个产品,而抽象工厂模式中的工厂接口中提供多个不同的方法,用于创建不同产品结构的相关联的对象。
要点:抽象工厂模式的工厂接口中提供的创建产品的方法个数,取决于产品等级结构的个数,比如存在CPU和主板两个产品等级结构,则工厂接口中存在两个方法 createCPU和createMemory().
示例图:(一下图片来源:http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html)
UML图:
代码:
产品接口:
/// <summary>
/// 定义一个CPU产品接口
/// </summary>
public interface CPU
{
/// <summary>
/// 打印出CPU针脚数
/// </summary>
void calculate();
}
public interface Mainboard {
/// <summary>
/// 打印CPU插槽的孔数
/// </summary>
void InstallCPU();
}
//产品等级结构就是:实现同一个产品接口的子类,成为一个产品等级结构,有几个产品接口就有几个产品等级结构。
//产品族:由多个产品等级结构中相关联的产品组成的家族,比如CPU产品和Mainboard产品中,interal的cpu和interal的主板组成一个家族。
产品实现:
public class InteralCPU:CPU
{
public void calculate()
{
Console.WriteLine("Interal CPU的针脚数是755");
}
}
public class AMDCPU : CPU {
public void calculate()
{
Console.WriteLine("AMD CPU的针脚数是785");
}
}
public class InteralMainboard:Mainboard {
public void InstallCPU()
{
Console.WriteLine("Interal 主板的针孔数是755");
}
}
public class AMDMainboard : Mainboard {
public void InstallCPU()
{
Console.WriteLine("AMD 主板的针孔数是785");
}
}
工厂接口:
/// <summary>
/// 提供创建两个不同产品的方法,提供创建不同产品等级结构中功能相关的产品的对象的方法。即创建一个产品族的接口。
/// </summary>
public interface IFactory
{
CPU CreateCPU();
Mainboard CreateMainboard();
}
工厂实现:
/// <summary>
/// 将不同产品等级结构中的相关联的对象封装到一起,形成一个产品族。
/// </summary>
public class InteralFactory : IFactory {
public CPU CreateCPU()
{
return new InteralCPU();
}
public Mainboard CreateMainboard()
{
return new InteralMainboard();
}
}
public class AMDFactory : IFactory
{
public CPU CreateCPU()
{
return new AMDCPU();
}
public Mainboard CreateMainboard()
{
return new AMDMainboard();
}
}
客户端调用:
IFactory f1 = new InteralFactory();
CPU cpu= f1.CreateCPU();
Mainboard main = f1.CreateMainboard();
cpu.calculate();
main.InstallCPU();
Console.ReadLine();
- 第三课 创建型模式 第三节 抽象工厂模式(Abstract Factory Pattern)
- 创建型模式:抽象工厂模式(Abstract Factory Pattern)
- 设计模式第三节:Abstract Factory(抽象工厂)
- Abstract Factory抽象工厂(创建型模式)
- 创建型模式 ABSTRACT FACTORY---抽象工厂
- Abstract Factory 抽象工厂(创建型模式)
- 【创建型模式】abstract factory(抽象工厂)
- 【创建型模式】abstract factory(抽象工厂)
- 创建型-抽象工厂模式(abstract factory)
- 第 6 章 抽象工厂模式【Abstract Factory Pattern】
- 设计模式学习笔记--抽象工厂模式(Abstract Factory Pattern)【创建型模式】
- 抽象工厂模式(Abstract Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 抽象工厂模式 Abstract Factory Pattern
- 抽象工厂模式(abstract factory pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 抽象工厂模式 The Abstract Factory Pattern
- 抽象工厂模式(Abstract Factory Pattern)
- 程序员编程艺术:第十章、如何给10^7个数据量的磁盘文件排序
- Java、JavaScript、php、mysql、oracle生成uuid(32位)
- printk 运行级别定义
- UML各种对象、关系表示方法
- android 简单图片动画播放实现
- 第三课 创建型模式 第三节 抽象工厂模式(Abstract Factory Pattern)
- 左中框同齐 不用JS实现 用CSS实现
- SQLServer 启动问题,服务器错误代码126 解决办法
- android学习之-MediaRecorder
- 程序员编程艺术:三之三续、求数组中给定下标区间内的第K小(大)元素
- asp.net web form与jQuery Validate一起工作时解决服务器端事件不能被触发的问题
- sql 语言中保留两位小数
- S3C2440 裸奔之始
- 程序员编程艺术第一~十章集锦与总结(教你如何编程)--持续更新中