抽象工厂模式(Abstract Factory Pattern)
2014-01-10 16:52
423 查看
动机(Motivation)
在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。
如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?
意图(Intent)
提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。
Abstract Factory模式的几个要点
(1) 如果没有应对“多系列对象构建”的需求变化,则没有必要使用Abstract Factory模式,这时候使用简单的静态工厂完全可以。
(2)“系列对象”指的是这些对象之间有相互依赖、或作用的关系,例如游戏开发场景中的“道路”与“房屋”的依赖,“道路”与“地道”的依赖。
(3) Abstract Factory模式主要在于应对“新系列”的需求变动。其缺点在于难以应对“新对象”的需求变动。
(4) Abstract Factory模式经常和Factory Method模式共同组合来应对“对象创建”的需求变化。
在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。
如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?
意图(Intent)
提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。
Abstract Factory模式的几个要点
(1) 如果没有应对“多系列对象构建”的需求变化,则没有必要使用Abstract Factory模式,这时候使用简单的静态工厂完全可以。
(2)“系列对象”指的是这些对象之间有相互依赖、或作用的关系,例如游戏开发场景中的“道路”与“房屋”的依赖,“道路”与“地道”的依赖。
(3) Abstract Factory模式主要在于应对“新系列”的需求变动。其缺点在于难以应对“新对象”的需求变动。
(4) Abstract Factory模式经常和Factory Method模式共同组合来应对“对象创建”的需求变化。
namespace 抽象工厂 { public interface IHuman { void GetColor(); void GetGender(); } } namespace 抽象工厂 { public abstract class MaleHuman : IHuman { public abstract void GetColor(); public void GetGender() { Console.WriteLine("男人就是累啊!"); } } } namespace 抽象工厂 { public abstract class FemaleHuman:IHuman { public abstract void GetColor(); public void GetGender() { Console.WriteLine("女人也顶半边天!"); } } } namespace 抽象工厂 { public class WhiteMaleHuman : MaleHuman { public override void GetColor() { Console.WriteLine("我是白人,我真白"); } } } namespace 抽象工厂 { public class WhiteFemaleHuman : FemaleHuman { public override void GetColor() { Console.WriteLine("我是白人,我真白!"); } } } namespace 抽象工厂 { public class BlackMaleHuman : MaleHuman { public override void GetColor() { Console.WriteLine("我是黑人,我真壮!"); } } } namespace 抽象工厂 { public class BlackFemaleHuman : FemaleHuman { public override void GetColor() { Console.WriteLine("我是黑人,我真壮!"); } } } namespace 抽象工厂 { public class YellowMaleHuman : MaleHuman { public override void GetColor() { Console.WriteLine("我是黄种人,我骄傲!"); } } } namespace 抽象工厂 { public class YellowFemaleHuman : FemaleHuman { public override void GetColor() { Console.WriteLine("我是黄种人,我骄傲!"); } } } namespace 抽象工厂 { interface IFactory { IHuman CreateMaleHuman(); IHuman CreateFemaleHuman(); } } namespace 抽象工厂 { public class WhiteHumanFactory:IFactory { public IHuman CreateMaleHuman() { return new WhiteMaleHuman(); } public IHuman CreateFemaleHuman() { return new WhiteFemaleHuman(); } } } namespace 抽象工厂 { public class BlackHumanFactory : IFactory { public IHuman CreateMaleHuman() { return new BlackMaleHuman(); } public IHuman CreateFemaleHuman() { return new BlackMaleHuman(); } } } namespace 抽象工厂 { public class YellowHumanFactory : IFactory { public IHuman CreateMaleHuman() { return new YellowMaleHuman(); } public IHuman CreateFemaleHuman() { return new YellowMaleHuman(); } } } namespace 抽象工厂 { class Program { static void Main(string[] args) { IFactory whiteHumanFactory = new WhiteHumanFactory(); IHuman whiteMaleHuman = whiteHumanFactory.CreateMaleHuman(); whiteMaleHuman.GetColor(); whiteMaleHuman.GetGender(); IHuman whiteFemaleHuman = whiteHumanFactory.CreateFemaleHuman(); whiteFemaleHuman.GetColor(); whiteFemaleHuman.GetGender(); IFactory blackHumanFactory = new BlackHumanFactory(); IHuman blackMaleHuman = blackHumanFactory.CreateMaleHuman(); blackMaleHuman.GetColor(); blackMaleHuman.GetGender(); IHuman blackFemaleHuman = blackHumanFactory.CreateFemaleHuman(); blackFemaleHuman.GetColor(); blackFemaleHuman.GetGender(); IFactory yellowHumanFactory = new YellowHumanFactory(); IHuman yellowMaleHuman = yellowHumanFactory.CreateMaleHuman(); yellowMaleHuman.GetColor(); yellowMaleHuman.GetGender(); IHuman yellowFemaleHuman = yellowHumanFactory.CreateFemaleHuman(); yellowFemaleHuman.GetColor(); yellowFemaleHuman.GetGender(); Console.ReadKey(); } } }
相关文章推荐
- 抽象工厂模式(abstract factory pattern)------创造型模式
- 二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)
- Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
- 抽象工厂模式【Abstract Factory Pattern 】
- Abstract Factory Pattern(抽象工厂模式)——莫勇鹏老师
- 设计模式 - 抽象工厂模式(abstract factory pattern) 详解
- 第 6 章 抽象工厂模式【Abstract Factory Pattern】
- java设计模式——抽象工厂模式(Abstract Factory Pattern)
- C#设计模式——抽象工厂模式(Abstract Factory Pattern)
- 设计模式--2: Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
- (C++实现)——抽象工厂模式(Abstract Factory Pattern)
- 设计模式抽象工厂模式(AbstractFactoryPattern)
- 抽象工厂模式(Abstract Factory Pattern)
- Abstract Factory Pattern(抽象工厂模式)——莫勇鹏老师
- 设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 第三课 创建型模式 第三节 抽象工厂模式(Abstract Factory Pattern)
- 第 6 章 抽象工厂模式【Abstract Factory Pattern】
- 抽象工厂模式(Abstract Factory Pattern)实现以及示例demo
- 23种设计模式(3)_创建型_抽象工厂模式(Abstract Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)