一、定义
一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行
具体实现
1. namespace 工厂方法 2. { 3. internal class Program 4. { 5. static void Main(string[] args) 6. { 7. //我要一个苹果X手机 8. IApplePhoneFactory applexPhone = new IphoneXFactory(); 9. IAppleProduct X = applexPhone.getAppleProduct(); 10. //我要一个苹果手机 11. IphoneXProduct iphoneX = new IphoneXProduct(); 12. 13. } 14. } 15. 16. //构建苹果手机工厂接口 17. interface IApplePhoneFactory 18. { 19. //获取具体产品 20. IAppleProduct getAppleProduct(); 21. 22. } 23. 24. //抽象的产品接口 25. public interface IAppleProduct 26. { 27. void ProductIphone(); 28. } 29. 30. //苹果X产品的具体实现工厂 31. public class IphoneXFactory : IApplePhoneFactory 32. { 33. //实现 34. public IAppleProduct getAppleProduct() 35. { 36. return new IphoneXProduct(); 37. } 38. } 39. //苹果X产品生产类 40. public class IphoneXProduct : IAppleProduct 41. { 42. public void ProductIphone() 43. { 44. Console.WriteLine("我是苹果X"); 45. } 46. } 47. }
二、应用
1、主要解决
接口选择的问题
2、什么时候使用?
当我们明确地计划不同条件下创建不同实例的时候
3、如何解决
让其子类实现工厂接口,返回的也是一个抽象的产品
4、优点
- 一个调用者想创建一个对象,只要知道其名称就可以了
- 扩展性高,如果增加一个产品,只要扩展一个工厂类就可以
- 屏蔽产品的具体实现,调用者只关心产品的接口
5、缺点
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖