C#设计模式--抽象工厂模式
2017-02-19 12:04
387 查看
设计模式:
抽象工厂模式(Abstract factory pattern)
在前几篇文章张分别介绍了工厂方法模式,简单工厂模式
简单工厂模式:
简单工厂模式的工厂类随着产品类的增加需要增加额外的代码
工厂方法模式:
工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性
但是在实际应用中,一个工厂不止会创建单一的产品,因为现在的工厂都多元化了,一个工厂创建一系列的产品,这就引入了抽象工厂的概念。
抽象工厂模式
抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
实例:
下面以一个生产手机主要配件为例子,假设手机工厂需要生产手机屏幕和手机主板,俩条生产线,那么不同品牌的手机工厂生产出的屏幕和主板各不相同。
工厂方法模式类图:
抽象工厂模式C#代码举例:
AbstractFactory抽象工厂类
/// <summary> /// 抽象工厂类:提供创建不同品牌的手机屏幕和手机主板 /// </summary> public abstract class AbstractFactory { //工厂生产屏幕 public abstract Screen CreateScreen(); //工厂生产主板 public abstract MotherBoard CreateMotherBoard(); }
手机屏幕和主板基类
Screen手机屏幕类
/// <summary> /// 屏幕抽象类:提供每一品牌的屏幕的继承 /// </summary> public abstract class Screen { public abstract void print(); }
MotherBoard手机主板类
/// <summary> /// 主板抽象类:提供每一品牌的主板的继承 /// </summary> public abstract class MotherBoard { public abstract void print(); }
苹果手机屏幕和主板类
AppleScreen苹果手机屏幕类
/// <summary> /// 苹果手机屏幕 /// </summary> public class AppleScreen:Screen { public override void print() { Console.WriteLine("苹果手机屏幕!"); } }
AppleMotherBoard苹果手机主板类
/// <summary> /// 苹果手机主板 /// </summary> public class AppleMotherBoard:MotherBoard { public override void print() { Console.WriteLine("苹果手机主板!"); } }
小米手机屏幕和主板类
XiaoMiScreen小米手机屏幕类
/// <summary> /// 小米手机屏幕 /// </summary> public class XiaoMiScreen:Screen { public override void print() { Console.WriteLine("小米手机屏幕!"); } }
XiaoMiMotherBoard小米手机主板类
/// <summary> /// 小米手机主板类 /// </summary> public class XiaoMiMotherBoard :MotherBoard { public override void print() { Console.WriteLine("小米手机主板!"); }
苹果手机工厂类和小米手机工厂类
AppleFactory苹果手机工厂类
/// <summary> /// 苹果手机工厂 /// </summary> public class AppleFactory : AbstractFactory { /// <summary> /// 生产苹果手机屏幕 /// </summary> /// <returns></returns> public override Screen CreateScreen() { return new AppleScreen(); } /// <summary> /// 生产苹果手机主板 /// </summary> /// <returns></returns> public override MotherBoard CreateMotherBoard() { return new AppleMotherBoard(); } }
XiaoMi手机工厂类
/// <summary> /// 小米手机工厂类 /// </summary> public class XiaoMiFactory : AbstractFactory { /// <summary> /// 生产小米手机屏幕 /// </summary> /// <returns></returns> public override Screen CreateScreen() { return new XiaoMiScreen(); } /// <summary> /// 生产小米手机主板 /// </summary> /// <returns></returns> public override MotherBoard CreateMotherBoard() { return new XiaoMiMotherBoard(); } }
工厂测试类
class Test { static void Main(string[] args) { //小米工厂生产小米手机的屏幕和主板 AbstractFactory xiaomiFactory = new XiaoMiFactory(); Screen xiaomiScreen = xiaomiFactory.CreateScreen(); xiaomiScreen.print(); MotherBoard xiaomiMotherBoard = xiaomiFactory.CreateMotherBoard(); xiaomiMotherBoard.print(); //苹果工厂生产苹果手机屏幕和主板 AbstractFactory appleFactory = new AppleFactory(); Screen appleScreen = appleFactory.CreateScreen(); appleScreen.print(); MotherBoard appleMotherBoard = appleFactory.CreateMotherBoard(); appleMotherBoard.print(); Console.Read(); } }
运行结果:
源代码工程文件下载
相关文章推荐
- 设计模式C#描述——抽象工厂模式
- 设计模式C#描述——抽象工厂模式
- c#设计模式--抽象工厂模式
- C#设计模式(4)——抽象工厂模式
- C#设计模式——抽象工厂模式(Abstract Factory Pattern)
- 设计模式C#描述——抽象工厂模式
- 【转】设计模式C#描述——抽象工厂模式
- C#设计模式编程之抽象工厂模式新解
- C#设计模式编程之抽象工厂模式新解
- C#设计模式(3):抽象工厂模式(Abstract Factory)(转载)
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 转贴:C#设计模式编程之抽象工厂模式新解
- C# 设计模式 之 抽象工厂模式
- C#设计模式之工厂模式(Factory)--03 抽象工厂模式(Abstract Factory)
- [导入]C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式
- C#设计模式之抽象工厂模式
- C#设计模式之3——抽象工厂模式
- C#设计模式之工厂模式(Factory)--04 抽象工厂模式中访问具体产品类的属性