首页 / 设计模式 / C# 设计模式-抽象工厂模式
C# 设计模式-抽象工厂模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# 设计模式-抽象工厂模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2243字,纯文字阅读大概需要4分钟。
内容图文
一.介绍
抽象工厂模式(Abstract Factory Pattern)。属于创建型模式。它提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
二.场景
仍然是举例之前工厂模式使用的买水果例子。我们(调用方)去水果店(工厂接口)买水果,不同水果有不同的售货员(工厂类)负责,我们只要找对应售货员,就能买到对应的水果(工厂类将水果类实例化,返回对象)。现在,水果店升级,不光只卖水果,还卖水果饮料(工厂接口提供返回水果类和返回水果饮料接口),对应售货员也负责对应的水果和水果饮料。
三.实现
定义父类接口IFruit(水果)和水果类。
public interface IFruit { public string Name { get; set; } } public class Apple : IFruit { public string Name { get; set; } = "苹果"; } public class Orange : IFruit { public string Name { get; set; } = "橙"; }
定义父类接口IFruitDrink(水果饮料)和水果饮料类。
public interface IFruitDrink { public string Name { get; set; } } public class AppleDrink : IFruitDrink { public string Name { get; set; } = "苹果饮料"; } public class OrangeDrink : IFruitDrink { public string Name { get; set; } = "橙饮料"; }
定义工厂接口和工厂类。
public interface IFactory { IFruit CreateFruit(); IFruitDrink CreateFruitDrink(); } public class AppleFactory : IFactory { public IFruit CreateFruit() { return new Apple(); } public IFruitDrink CreateFruitDrink() { return new AppleDrink(); } } public class OrangeFactory : IFactory { public IFruit CreateFruit() { return new Orange(); } public IFruitDrink CreateFruitDrink() { return new AppleDrink(); } }
调用工厂类,获取苹果和苹果饮料。
public static void Main(string[] args) { //苹果 IFactory factory = new AppleFactory(); IFruit fruit = factory.CreateFruit(); IFruitDrink fruitDrink = factory.CreateFruitDrink(); Console.WriteLine(fruit.Name); Console.WriteLine(fruitDrink.Name); }
四.总结
可以看出,抽象工厂模式和工厂方法模式的区别就是,抽象工厂模式是生产多个产品,工厂方法模式是生产单个产品。只有一种产品的抽象工厂模式就是工厂方法模式,可以把工厂方法模式当成是抽象工厂模式的一个特例。
抽象工厂模式有和工厂方法模式的优点,对添加系列产品是符合开闭原则的。比如新增一种香蕉和香蕉饮料,可以直接新增香蕉类、香蕉饮料类和香蕉工厂类,而不影响现有功能。
缺点就是对新增新产品是不符合开闭原则的,比如新增产品雪糕,不仅要新增雪糕接口和雪糕类,还得修改抽象工厂类,新增一个返回雪糕的接口。原有的苹果工厂和橙工厂也得去实现这个返回雪糕的接口方法。
内容总结
以上是互联网集市为您收集整理的C# 设计模式-抽象工厂模式全部内容,希望文章能够帮你解决C# 设计模式-抽象工厂模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。