经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
简易的工厂设计模式
来源:cnblogs  作者:tokengo  时间:2023/3/8 10:59:51  对本文有异议

工厂设计模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露对象的创建逻辑。在工厂模式中,我们定义一个接口或抽象类,该接口或抽象类用于创建对象,但让子类决定要实例化的类。工厂方法模式使类的实例化延迟到其子类。

下面是一个完整的C#实现案例:

首先,我们定义一个接口,用于创建对象:

  1. public interface IAnimal
  2. {
  3. void Speak();
  4. }

然后,我们定义两个实现该接口的类:

  1. public class Dog : IAnimal
  2. {
  3. public void Speak()
  4. {
  5. Console.WriteLine("狗说:汪,汪");
  6. }
  7. }
  8. public class Cat : IAnimal
  9. {
  10. public void Speak()
  11. {
  12. Console.WriteLine("猫说:喵。");
  13. }
  14. }

接下来,我们定义一个工厂类,该类根据传入的参数创建相应的对象:

  1. public class AnimalFactory
  2. {
  3. public IAnimal GetAnimal(string animalType)
  4. {
  5. switch (animalType.ToLower())
  6. {
  7. case "dog":
  8. return new Dog();
  9. case "cat":
  10. return new Cat();
  11. default:
  12. throw new ArgumentException("无效动物型");
  13. }
  14. }
  15. }

最后,我们可以使用工厂类来创建对象:

  1. AnimalFactory animalFactory = new AnimalFactory();
  2. IAnimal dog = animalFactory.GetAnimal("dog");
  3. dog.Speak(); // 输出:狗说:汪汪
  4. IAnimal cat = animalFactory.GetAnimal("cat");
  5. cat.Speak(); // 输出:猫说:喵

在这个例子中,我们使用工厂类来创建不同类型的动物对象,而不需要暴露对象的创建逻辑。这使得我们可以轻松地添加新的动物类型,而不需要修改现有的代码。

以下是一个抽象工厂的C#示例:

  1. // 抽象产品接口
  2. public interface IProduct
  3. {
  4. void Use();
  5. }
  6. // 具体产品A
  7. public class ProductA : IProduct
  8. {
  9. public void Use()
  10. {
  11. Console.WriteLine("使用产品A");
  12. }
  13. }
  14. // 具体产品B
  15. public class ProductB : IProduct
  16. {
  17. public void Use()
  18. {
  19. Console.WriteLine("使用产品B");
  20. }
  21. }
  22. // 抽象工厂接口
  23. public interface IFactory
  24. {
  25. IProduct CreateProduct();
  26. }
  27. // 具体工厂A
  28. public class FactoryA : IFactory
  29. {
  30. public IProduct CreateProduct()
  31. {
  32. return new ProductA();
  33. }
  34. }
  35. // 具体工厂B
  36. public class FactoryB : IFactory
  37. {
  38. public IProduct CreateProduct()
  39. {
  40. return new ProductB();
  41. }
  42. }
  43. // 客户端代码
  44. public class Client
  45. {
  46. private IFactory factory;
  47. public Client(IFactory factory)
  48. {
  49. this.factory = factory;
  50. }
  51. public void UseProduct()
  52. {
  53. IProduct product = factory.CreateProduct();
  54. product.Use();
  55. }
  56. }
  57. // 使用示例
  58. Client clientA = new Client(new FactoryA());
  59. clientA.UseProduct(); // 输出:使用产品A
  60. Client clientB = new Client(new FactoryB());
  61. clientB.UseProduct(); // 输出:使用产品B

在这个示例中,抽象工厂接口 IFactory 定义了一个 CreateProduct 方法,用于创建产品。具体工厂 FactoryAFactoryB 实现了 IFactory 接口,并分别创建了具体产品 ProductAProductB。客户端代码 Client 接收一个工厂对象,并使用工厂对象创建产品并使用。这样,客户端代码就可以通过更换工厂对象来创建不同的产品。

原文链接:https://www.cnblogs.com/hejiale010426/p/17191045.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号