设计模式之三:抽象工厂模式
2017-01-18 17:30
260 查看
抽象工厂模式(Abstract Factory Pattern):
定义:Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类)。
图:
优点:
1、抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。
2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
3、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
缺点:
扩展非常困难
实现:
抽象产品类1
抽象产品类2
抽象产品类2的实现类 :可乐
抽象产品类2的实现类:咖啡
抽象工厂类:
产品等级2的实现类:豪华型套餐
/// <summary>
/// 豪华型套餐,包括鸡腿和咖啡
/// </summary>
public class LuxuryPackageFactory : IKFCFactory
{
public KFCFood CreateFood()
{
return new Chicken();
}
public KFCDrink CreateDrink()
{
return new Coffee();
}
}
场景实现:
class Program
{
static void Main(string[] args)
{
IKFCFactory factory = new CheapPackageFactory();
KFCFood food = factory.CreateFood();
food.Display();
KFCDrink drink = factory.CreateDrink();
drink.Display();
}
}
好了,这一章就写到这,欢迎大家加入QQ群:280993838 。或者关注我的公众号:
定义:Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类)。
图:
优点:
1、抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。
2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
3、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
缺点:
扩展非常困难
实现:
抽象产品类1
/// <summary> /// Product族1,KFC食品 /// </summary> public abstract class KFCFood { public abstract void Display(); }产品类1的实现类:鸡腿
public class Chicken : KFCFood { public override void Display() { Console.WriteLine("鸡腿 + 1"); } }
产品类1的实现类:鸡翅
public class Wings : KFCFood { public override void Display() { Console.WriteLine("鸡翅 + 1"); } }
抽象产品类2
/// <summary> /// Product族2,KFC饮料 /// </summary> public abstract class KFCDrink { public abstract void Display(); }
抽象产品类2的实现类 :可乐
public class Coke : KFCDrink { public override void Display() { Console.WriteLine("可乐 + 1"); } }
抽象产品类2的实现类:咖啡
public class Coffee : KFCDrink { public override void Display() { Console.WriteLine("咖啡 + 1"); } }
抽象工厂类:
/// <summary> /// 抽象工厂,生产套餐 /// </summary> public interface IKFCFactory { KFCFood CreateFood(); KFCDrink CreateDrink(); } }产品等级1的实现类: 经济型套餐
/// <summary> /// 经济型套餐,包括鸡翅和可乐 /// </summary> public class CheapPackageFactory : IKFCFactory { public KFCFood CreateFood() { return new Wings(); } public KFCDrink CreateDrink() { return new Coke(); } }
产品等级2的实现类:豪华型套餐
/// <summary>
/// 豪华型套餐,包括鸡腿和咖啡
/// </summary>
public class LuxuryPackageFactory : IKFCFactory
{
public KFCFood CreateFood()
{
return new Chicken();
}
public KFCDrink CreateDrink()
{
return new Coffee();
}
}
场景实现:
class Program
{
static void Main(string[] args)
{
IKFCFactory factory = new CheapPackageFactory();
KFCFood food = factory.CreateFood();
food.Display();
KFCDrink drink = factory.CreateDrink();
drink.Display();
}
}
好了,这一章就写到这,欢迎大家加入QQ群:280993838 。或者关注我的公众号:
相关文章推荐
- 设计模式C#描述——抽象工厂模式
- .NET设计模式-抽象工厂模式(Abstract Factory)
- 设计模式C#描述——抽象工厂模式
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 设计模式——创建型模式之 Abstract Factory抽象工厂模式
- [导入]C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)
- 设计模式C#描述——抽象工厂模式
- Java设计模式圣经连载(03)-抽象工厂模式
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 我的设计模式之旅(3)――抽象工厂模式AbstractFactory
- 设计模式实践(抽象工厂模式应用)—通信录的优化过程
- 设计模式之抽象工厂模式
- AspectJ实现设计模式(四)——抽象工厂模式
- .NET设计模式:抽象工厂模式(Abstract Factory)
- [导入]C#面向对象设计模式纵横谈(4):Abstract Factory 抽象工厂模式(创建型模式)
- 设计模式笔记-抽象工厂模式
- .Net设计模式之抽象工厂模式(Abstract Factory)
- .NET设计模式(3):抽象工厂模式(Abstract Factory)(转)
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 设计模式(3)-抽象工厂模式(Abstract Factory)