[AYJS] wpf设计模式学习[4]-抽象工厂,简单工厂

简单工厂的回顾:

ay的解释: 一个抽象类A,多个A的子类A1,A2,A3

然后来个Factory,下面一个static A createA(string aa)下面switch根据aa的值,返回不同的子类。

客户端使用,只要关注Factory就行。

抽象工厂就是把,Factory又提升了一层,抽象出一个IFactory,然后每个Factory返回一个A的子类。

blob.png

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();
            }
        }

    }

}

blob.png

OK,接下来由于每个皮肤生成都需要过程。可能由多个开发者自己单独开发的,我们就需要把主题那一层,再抽象出来。

效果:

blob.png

代码: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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值