用不同具体工厂创建不同的具体对象,代码仅处理具体对象的父类(或接口)
抽象工厂和工厂方法的区别:
- 抽象工厂使用工厂方法创建一系列的对象
- 工厂方法通常只创建一个对象
包括:具体工厂、抽象对象、具体对象
例子:
不同的出版社出版不同的书籍,出版社A出版书籍A,出版社B出版书籍B。
具体工厂:出版社A(PublisherA)、出版社B(PublisherB)
抽象对象:书籍接口(IBook)
具体对象:书籍A(BookA)、书籍B(BookA)
UML类图
相关接口和类定义:
using System;
namespace FactoryMethod
{
/// <summary>
/// 出版社A
/// </summary>
class PublisherA
{
public IBook PublishBook()
{
//创建书籍A对象
return new BookA();
}
}
/// <summary>
/// 出版社B
/// </summary>
class PublisherB
{
public IBook PublishBook()
{
//创建书籍B对象
return new BookB();
}
}
/// <summary>
/// 书籍接口
/// </summary>
interface IBook
{
void Read();
}
/// <summary>
/// 书籍A
/// </summary>
class BookA : IBook
{
public void Read()
{
Console.WriteLine("阅读书籍A");
}
}
/// <summary>
/// 书籍B
/// </summary>
class BookB : IBook
{
public void Read()
{
Console.WriteLine("阅读书籍B");
}
}
}
调用示例:
namespace FactoryMethod
{
class Program
{
static void Main(string[] args)
{
IBook book;
PublisherA publisherA = new PublisherA();
//出版社A出版书籍A
book = publisherA.PublishBook();
book.Read();
PublisherB publisherB = new PublisherB();
//出版社B出版书籍B
book = publisherB.PublishBook();
book.Read();
}
}
}
结果:
参考资料:《设计模式-可复用面对对象软件的基础》