工厂方法

发布时间:2017-3-2 3:56:58 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"工厂方法 ",主要涉及到工厂方法 方面的内容,对于工厂方法 感兴趣的同学可以参考一下。

接上篇简单工厂模式进行改进。

由于简单工厂模式违背开-闭原则,弹性太弱,例如增加一种鸟类,会造成修改类(工厂类)

好的实现应该是增加一种鸟类不影响现有类的修改。

思路:

在简单工厂的基础上我们增加一个抽象类(基础抽象类),并且在基础抽象工厂类中必须要定义一个抽象方法用来获取所有鸟类的抽象基类,然后使其被其他各鸟类的工厂类继承,这样实现之后,客户端实例华某鸟类的工厂赋给基础抽象工厂类,用基础抽象工厂类间接获取到实例华对象。

实现代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{    /// <summary>    /// 定义工厂的接口规范所有不同类型的工厂类    /// </summary>    /// <summary>    /// 所有鸟类的抽象基类    /// </summary>    public abstract class Bird    {        public virtual void Feather()        {            Console.Write("我有羽毛了\r\n");        }        public abstract void Wing();    }    /// <summary>    /// 老鹰    /// </summary>    class Eagle : Bird    {        public override void Wing()        {            Console.Write("我是老鹰我的翅膀很宽阔!\r\n");        }    }    /// <summary>    /// 鸵鸟    /// </summary>    public class Ostrich : Bird    {        public override void Wing()        {            Console.Write("我是驼鸟有翅膀也不能飞!\r\n");        }    }    /// <summary>    /// 麻雀    /// </summary>    class Sparrow : Bird    {        public override void Feather()        {            Console.Write("我是麻雀我的羽毛是麻色的!\r\n");        }        public override void Wing()        {            Console.Write("我是麻雀,我是zhizhiz的飞!\r\n");        }        public void Eat()        {            Console.Write("我是麻雀,我能吃!\r\n");        }    }    //**********************************基础工厂类    public abstract class Factory    {        public abstract Bird GetBird();    }    //**********************************其他工厂类    /// <summary>    /// 老鹰工厂    /// </summary>    public class EagleFactory : Factory    {        public override Bird GetBird()        {            return new Eagle();        }    }    /// <summary>    /// 鸵鸟工厂    /// </summary>    public class OstrichFactory : Factory    {        public override Bird GetBird()        {            return new Ostrich();        }    }    /// <summary>    /// 麻雀工厂    /// </summary>    public class SparrowFactory : Factory    {        public override Bird GetBird()        {            return new Sparrow();        }

上一篇:iOS: 使用KVO监听控制器中数组的变化
下一篇:Runtime 实现 动态添加属性

相关文章

关键词: 工厂方法

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。