3.3工厂方法模式

来源:互联网 发布:mac全屏游戏怎么切换 编辑:程序博客网 时间:2024/06/13 07:59

http://blog.csdn.net/ailands/article/details/7190192

http://blog.csdn.net/niuyongjie/article/details/1493243

http://blog.csdn.net/robingaoxb/article/details/6184299

一个更加形象的例子---鸟生蛋

 该例子的类图如下:

下面是程序的源代码:

鸟的类,它包含一个Produce()的抽象方法

using System;

namespace
 FactoryMethod
{
    /// <summary>

    
/// Bird 的摘要说明。
    
/// </summary>

    public abstract class Bird
    {
        #region 属性

        protected string name;
        #endregion

        #region 方法
        public Bird()
        {
            //

            
// TODO: 在此处添加构造函数逻辑
            
//
        }
        public Bird(string
 name)
        {
            this.name=
name;
        }
        public string
 Name
        {
            get

            {
                
return this.name;
            }
        }
        public abstract
 Egg Produce();
        #endregion

    }
}

鸡的类,它从鸟类继承下来

using System;

namespace FactoryMethod
{
    /// <summary>
    
/// Class2 的摘要说明。
    
/// </summary>
    public class Chicken:Bird
    {
        public Chicken()
        {
            //
            
// TODO: 在此处添加构造函数逻辑
            
//
            this.name="鸡";
        }
        public override Egg Produce()
        {
            return new ChickenEgg();
        }

    }
}

鸭子的类,从鸟类中继承

using System;

namespace FactoryMethod
{
    /// <summary>
    
/// Duck 的摘要说明。
    
/// </summary>
    public class Duck:Bird
    {
        public Duck()
        {
            //
            
// TODO: 在此处添加构造函数逻辑
            
//
            this.name="鸭";
        }
        public override Egg Produce()
        {
            return new DuckEgg();
        }
    }
}

蛋类,它是一个抽象的类

using System;

namespace FactoryMethod
{
    /// <summary>
    
/// Egg 的摘要说明。
    
/// </summary>
    public class Egg
    {
        #region 属性
        protected string name;
        #endregion
        #region 方法
        public Egg()
        {
            //
            
// TODO: 在此处添加构造函数逻辑
            
//
        }
        public Egg(string name)
        {
            this.name=name;
        }
        public string Name
        {
            get
            {
                return this.name;
            }
        }
        #endregion
    }
}

鸡蛋的类(从蛋类继承)

using System;

namespace
 FactoryMethod
{
    /// <summary>

    
/// ChickenEgg 的摘要说明。
    
/// </summary>

    public class ChickenEgg:Egg
    {
        public
 ChickenEgg()
        {
            //

            
// TODO: 在此处添加构造函数逻辑
            
//
            this.name="鸡蛋"
;
        }
    }
}

鸭蛋的类(从蛋类继承)

using System;

namespace
 FactoryMethod
{
    /// <summary>

    
/// DuckEgg 的摘要说明。
    
/// </summary>

    public class DuckEgg:Egg
    {
        public
 DuckEgg()
        {
            //

            
// TODO: 在此处添加构造函数逻辑
            
//
            this.name="鸭蛋"
;            
        }
    }
}

客户端程序

using System;

namespace FactoryMethod
{
    /// <summary>
    
/// Class1 的摘要说明。
    
/// </summary>
    class Class1
    {
        /// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            //
            
// TODO: 在此处添加代码以启动应用程序
            
//
            Chicken chicken=new Chicken();
            System.Console.WriteLine(chicken.Name+" 生 "+chicken.Produce().Name);
            Duck duck=new Duck();
            System.Console.WriteLine(duck.Name+" 生 "+duck.Produce().Name);
            System.Console.ReadLine();

        }
    }
}

程序运行的结果如下:


原创粉丝点击