找回密码
 立即注册
首页 业界区 业界 重温设计模式 --- 工厂方法模式

重温设计模式 --- 工厂方法模式

各卧唯 前天 20:40
引言

工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但是让子类决定将哪一个类实例化。换句话说,工厂方法模式让一个类的实例化延迟到其子类。
工厂方法模式有以下几个主要角色:

  • 抽象工厂(AbstractFactory):声明用于创建抽象产品的操作的接口。
  • 工厂实现(ConcreteFactory):实现创建具体产品对象的操作。
  • 抽象产品(AbstractProduct):声明产品对象类型的接口。
  • 产品实现(Product):定义由相应的具体工厂创建的产品对象,实现AbstractProduct接口。
下面使用c#实现一个工厂方法模式:
抽象工厂
  1. public abstract class Factory
  2. {
  3.     public abstract Product CreateProduct();
  4. }
复制代码
工厂实现
  1. // 具体工厂类
  2. public class ConcreteFactoryA : Factory
  3. {
  4.     public override Product CreateProduct()
  5.     {
  6.         return new ConcreteProductA();
  7.     }
  8. }
  9. public class ConcreteFactoryB : Factory
  10. {
  11.     public override Product CreateProduct()
  12.     {
  13.         return new ConcreteProductB();
  14.     }
  15. }
复制代码
抽象产品
  1. // 抽象产品类
  2. public abstract class Product
  3. {
  4.     public abstract void ShowInfo();
  5. }
复制代码
产品实现
  1. // 具体产品类
  2. public class ConcreteProductA : Product
  3. {
  4.     public override void ShowInfo()
  5.     {
  6.         Console.WriteLine("This is product A.");
  7.     }
  8. }
  9. public class ConcreteProductB : Product
  10. {
  11.     public override void ShowInfo()
  12.     {
  13.         Console.WriteLine("This is product B.");
  14.     }
  15. }
复制代码
下面可以这样调用:
  1. Factory factoryA = new ConcreteFactoryA();
  2. Product productA = factoryA.CreateProduct();
  3. productA.ShowInfo();
  4. Factory factoryB = new ConcreteFactoryB();
  5. Product productB = factoryB.CreateProduct();
  6. productB.ShowInfo();
复制代码
输出:
  1. This is product A.
  2. This is product B.
复制代码
在上面的示例中,Product 是抽象产品类,ConcreteProductA 和 ConcreteProductB 是具体产品类,Factory 是抽象工厂类,ConcreteFactoryA 和 ConcreteFactoryB 是具体工厂类。客户端代码使用工厂类创建产品对象,并调用其方法。
总结

当需要添加新的产品时,只需创建一个新的具体产品类,并实现抽象产品类中的抽象方法即可。当需要添加新的工厂时,只需创建一个新的具体工厂类,并实现抽象工厂类中的抽象方法即可。这样,客户端代码就不需要改变。这也是工厂方法模式的一个重要优点,它让代码更加灵活,易于扩展和维护。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册