简单工厂的回顾:
ay的解释: 一个抽象类A,多个A的子类A1,A2,A3
然后来个Factory,下面一个static A createA(string aa)下面switch根据aa的值,返回不同的子类。
客户端使用,只要关注Factory就行。
抽象工厂就是把,Factory又提升了一层,抽象出一个IFactory,然后每个Factory返回一个A的子类。
OK,先写个简单工厂的demo
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace StrategyMo.AbstractFactory { //代码是 杨洋原创,转载的请自己保持原文地址 ayjs.net public abstract class AyWpfTheme { public abstract void ApplyTheme(); } public class QQTheme : AyWpfTheme { public override void ApplyTheme() { Console.WriteLine("QQ风格 皮肤切换成功"); } } public class SanLiuLingTheme : AyWpfTheme { public override void ApplyTheme() { Console.WriteLine("360风格 皮肤切换成功"); } } public class Win10Theme : AyWpfTheme { public override void ApplyTheme() { Console.WriteLine("Win10风格 皮肤切换成功"); } } public class AyThemeFactory { public static AyWpfTheme CreateTheme(string themename) { switch (themename) { case "QQ": return new QQTheme(); case "360": return new SanLiuLingTheme(); case "Win10": return new Win10Theme(); default: return new Win10Theme(); } } } }
OK,接下来由于每个皮肤生成都需要过程。可能由多个开发者自己单独开发的,我们就需要把主题那一层,再抽象出来。
效果:
代码:www.ayjs.net ay的原创博客 技术服务业务
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace StrategyMo.AbstractFactory { public abstract class AyWpfTheme { public abstract void ApplyTheme(); } public class QQTheme : AyWpfTheme { public override void ApplyTheme() { Console.WriteLine("QQ风格 皮肤切换成功"); } } public class SanLiuLingTheme : AyWpfTheme { public override void ApplyTheme() { Console.WriteLine("360风格 皮肤切换成功"); } } public class Win10Theme : AyWpfTheme { public override void ApplyTheme() { Console.WriteLine("Win10风格 皮肤切换成功"); } } public class QQThemeFactory : IAyThemeFactory { public AyWpfTheme CreateTheme() { Console.WriteLine("努力加载QQ皮肤所需要的控件..."); return new QQTheme(); } } public class Win10ThemeFactory : IAyThemeFactory { public AyWpfTheme CreateTheme() { Console.WriteLine("努力加载Win10皮肤所需要的控件..."); return new Win10Theme(); } } public class SanLiuLingThemeFactory : IAyThemeFactory { public AyWpfTheme CreateTheme() { Console.WriteLine("努力加载360皮肤所需要的控件..."); return new SanLiuLingTheme(); } } public interface IAyThemeFactory { AyWpfTheme CreateTheme(); } }
使用方式:
IAyThemeFactory themeFactory = new Win10ThemeFactory(); AyWpfTheme thememgr = themeFactory.CreateTheme(); thememgr.ApplyTheme();