http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3680|回复: 5

[学习心得] C#工厂方法模式

[复制链接]
发表于 2018-12-24 14:08:20 | 显示全部楼层 |阅读模式
本帖最后由 惜 于 2018-12-24 15:19 编辑


一 、  工厂方法 (Factory Method ) 模式
工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建
工作推迟到子类中。

工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优
点,而且克服了它的缺点。

在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅
仅负责给出具体工厂必须实现的接口,而不接触哪一个产品类被实例化这种细节。这使得工厂方法模式可以允许
系统在不修改工厂角色的情况下引进新产品。

在 Factory Method 模式中,工厂类与产品类往往具有平行的等级结构,它们之间一一对应。

二 、 Factory Method  模式角色与结构 :

MLB3WZQOT1({@H4IDI145E9.png

抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须
实现这个接口。

具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,
并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator 与 TubeCreator。

抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接
口。在上图中,这个角色是 Light。

具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体
工厂创建,它们之间往往一一对应。

三 、  程序举例 :
VZESDB1J8KKX7{26~ETOLEV.png

活动过程包括:

客户端创建 BulbCreator 对象,客户端持有此对象的类型是 Creator,而实际类型是 BulbCreator。然后客户
端调用 BulbCreator 的 factory 方法,之后 BulbCreator 调用 BulbLight 的构造函数创造出产品 BulbLight
对象。

[C#] 纯文本查看 复制代码
    /// <summary>
    /// 定义出抽象类产品 - 灯
    /// </summary>
    public abstract class Light
    {
        public abstract void TurnON();

        public abstract void TurnOff();
    }

    /// <summary>
    /// 节能灯 - 具体出实际产品
    /// </summary>
    public class TubeLisgh : Light
    {
        public override void TurnON()
        {
            throw new NotImplementedException();
        }

        public override void TurnOff()
        {
            throw new NotImplementedException();
        }
    }

    /// <summary>
    /// 普通灯泡 - 具体出实际产品
    /// </summary>
    public class BulbLight : Light
    {
        public override void TurnON()
        {
            throw new NotImplementedException();
        }

        public override void TurnOff()
        {
            throw new NotImplementedException();
        }
    }

    /// <summary>
    /// 抽象工厂类 - 将创建产品实例的定义抽象化
    /// </summary>
    public abstract class Creator
    {
        public abstract Light factory();
    }

    /// <summary>
    /// 创建普通灯泡
    /// </summary>
    public class BulbCreator : Creator
    {
        public override Light factory()
        {
            return new BulbLight();
        }
    }

    /// <summary>
    /// 创建节能灯泡
    /// </summary>
    public class TubeCreator : Creator
    {
        public override Light factory()
        {
            return new TubeLisgh();
        }
    }


四 、  工厂方法模式与简单工厂模式
工厂方法模式与简单工厂模式再结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模
式把核心放在一个具体类上。

工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。

当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要
进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不
得不修改工厂方法,扩展性不好。

工厂方法模式退化后可以演变成简单工厂模式。







1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2018-12-24 14:13:57 | 显示全部楼层
我只是路过打酱油的。
发表于 2018-12-24 14:22:07 | 显示全部楼层
强烈支持楼主ing……
发表于 2018-12-24 15:34:37 | 显示全部楼层
真是难得给力的帖子啊。
发表于 2018-12-26 15:52:26 | 显示全部楼层
强烈支持楼主ing……
发表于 2018-12-26 16:34:44 | 显示全部楼层
看到这帖子真是高兴!
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-23 00:50

© 2014-2021

快速回复 返回顶部 返回列表