您的位置:首页 > 其它

第三课 创建型模式 第三节 抽象工厂模式(Abstract Factory Pattern)

2012-11-27 17:22 519 查看
昨天、今天我学习了抽象工厂设计模式,呵呵。今天做一下学习笔记。主要学习资料来源:《大话设计模式》、云涛的博客

依照惯例先记录一下抽象工厂模式的定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类,注意是一组,也就是说创建的至少是一个对象,我的理解为创建一个产品族对象提供一个接口。

产品族:位于不同产品等级结构中,功能相关联的产品组成的集合。抽象工厂模式提供的一系列产品就是一个产品族。

产品等级结构:相同结构的产品,通常表现为一个产品接口或产品的抽象类。

抽象工厂模式和工厂方法模式的区别:工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。工厂方法模式中的工厂接口提供的方法是创建一个产品,而抽象工厂模式中的工厂接口中提供多个不同的方法,用于创建不同产品结构的相关联的对象。

要点:抽象工厂模式的工厂接口中提供的创建产品的方法个数,取决于产品等级结构的个数,比如存在CPU和主板两个产品等级结构,则工厂接口中存在两个方法 createCPU和createMemory().

示例图:(一下图片来源:/content/4035022.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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐