一、概述 在软件开发中,常常会需要创建一系列相互依赖的对象,同时,由于需求的变化,往往存在较多系列对象的创建工作。如果采用常规的创建方法(new),会造成客户程序和对象创建工作的紧耦合。对此,抽象工厂模式提供了一种解耦手段。 二、抽象工厂模式 抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 抽象工厂模式的结构图如下:
AbstractFactory声明了一个创建抽象产品对象的操作接口。 ConcreteFactory实现了创建具体产品对象的操作。 AbstractProduct为一类产品对象声明一个接口。 ConcreteProduct实现AbstractProduct接口,定义一个将被相应的具体工厂创建的产品对象。 Client使用AbstractFactory和AbstractProduct声明的接口。 三、示例 我们以实现一个汽车工程为例来看一个简单的抽象工厂的例子。 首先定义抽象工厂
1 public abstract class CarFactory 2 { 3 public abstract void CreateWindows(); 4 public abstract void CreateWheels(); 5 }
接着实现两个具体的汽车工厂
1 public class BenzFactory : CarFactory 2 { 3 public override void CreateWindows() 4 { 5 Console.WriteLine("Create Benz Windows"); 6 } 7 8 public override void CreateWheels() 9 { 10 Console.WriteLine("Create Benz Wheels"); 11 } 12 } 13 public class BMWFactory : CarFactory 14 { 15 public override void CreateWindows() 16 { 17 Console.WriteLine("Create BMW Windows"); 18 } 19 20 public override void CreateWheels() 21 { 22 Console.WriteLine("Create BMW Wheels"); 23 } 24 }
最后看一下如何调用
1 static void Main(string[] args) 2 { 3 CarFactory carFactory = new BenzFactory(); 4 carFactory.CreateWindows(); 5 carFactory.CreateWheels(); 6 7 Console.WriteLine("Change Factory To BMWFactory"); 8 carFactory = new BMWFactory(); 9 carFactory.CreateWindows(); 10 carFactory.CreateWheels(); 11 12 Console.ReadLine(); 13 }
抽象工厂模式在实际应用中比较广泛,我们可以通过依赖注入的方式传递抽象工厂,并利用反射读取配置文件中关于具体工厂的信息,达到在不修改代码的情况下改变实际产品的目的。
|
请发表评论