当前位置:首页 > 学习参考 >

中国·山西太原 映辉教育旗下站点 www.sx-accp.com

如何合理创建c#对象

日期:2012-08-21 14:52  阅读:
创建对象:
通常情况下,人们都不是太重视对象的创建,而是更重视类的设计,但是创建对象确实又很重要。当前比较流行的方法是:工厂创建模式
工厂创建模式中的“工厂”就像真正的工厂,只是创建对象,而且,即使工厂实现有所改变,客户也不会受到影响。
工厂设计模式有两种办法:
1.单工厂模式 ///(这里不好画图,不知道我下面写的能不能正确显示)
Client1                         product1
             Factory            product2
Client2                         product3
客户端需要的是product,他们不需要了解product类是如何建立的,只需要给工厂提供一定的信息,然后创建product对象,看个例子:
 
using System;
using System.Collections.Generic;
using System.Text;
 
namespace ConsoleApplication3
{
    public interface IApparel  //定义一个产品接口
    {
        string ShowMe();
        bool Knit
        {
            get;
        }
    }
    public class SportsShirt : IApparel  //产品1(通过接口继承而来)
    {
        public string ShowMe()
        {
            return ("Sports Shirt");
        }
        public bool Knit
        {
            get
            {
                return true;
            }
        }
    }
    public class DressShirt : IApparel  //产品2
    {
        public string ShowMe()
        {
            return ("Dress Shirt");
        }
        public bool Knit
        {
            get
            {
                return false;
            }
        }
    }
    public class ApparelFactory  //创建工厂类
    {
        public IApparel CreateApparel(string apptype)  //定义一个返回对象的方法,该方法返回类型为IApparel,这样任何实现了IApparel接口的类的对象都可以返回。
        {
            switch (apptype)
            {
                case"MDRSHIRT":
                    return new DressShirt();
                case"MSPSHIRT":
                    return new SportsShirt();
            }
            return null;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            ApparelFactory factory = new ApparelFactory();
 
            IApparel ob1 = factory.CreateApparel("MDRSHIRT");
            IApparel ob2 = factory.CreateApparel("MSPSHIRT");
        
            Console.WriteLine(ob1.ShowMe());
            Console.WriteLine(ob1.Knit);
 
            Console.WriteLine(ob2.ShowMe());
            Console.WriteLine(ob2.Knit);
 
            System.Threading.Thread.Sleep(100000);
 
        }
    }
}
 
2.多工厂模式
Client1    Factory1   product1
Client2    Factory2   product2
Client3    Factory3 product3
对于简单的例子,用第一种方法比较好点,不过有时用多工厂更合适,比如可能有一个分布式应用。
下面的例子创建一个多工厂模式:
 
using System;
using System.Collections.Generic;
using System.Text;
 
namespace ConsoleApplication3
{
    public interface IApparel  //定义一个产品接口
    {
        string ShowMe();
        bool Knit
        {
            get;
        }
    }
    public class SportsShirt : IApparel  //产品1(通过接口继承而来)
    {
        public string ShowMe()
        {
            return ("Sports Shirt");
        }
        public bool Knit
        {
            get
            {
                return true;
            }
        }
    }
    public class DressShirt : IApparel  //产品2
    {
        public string ShowMe()
        {
            return ("Dress Shirt");
        }
        public bool Knit
        {
            get
            {
                return false;
            }
        }
    }
 
 
    public abstract class AppFactory   //创建工厂抽象类
    {
        public abstract IApparel CreateApparel();  //创建生产产品抽象类
    }
    public class DressShirtFactory : AppFactory  //Dress工厂
    {
        public override IApparel CreateApparel()
        {
            //throw new Exception("The method or operation is not implemented.");
            return new DressShirt();
        }
    }
    public class SportsShirtFactory : AppFactory  //Sports工厂
    {
        public override IApparel CreateApparel()
        {
            //throw new Exception("The method or operation is not implemented.");
            return new SportsShirt();
        }
    }
    public class ApparelCollector   //创建一个工厂和客户之间的中间人
    {
        public IApparel CollectApparel(AppFactory factory)
        {
            return factory.CreateApparel();
        }
    }
       
 
    class Program
    {
        static void Main(string[] args)
        {
            AppFactory factory = new DressShirtFactory();
            IApparel ob1 = new ApparelCollector().CollectApparel(factory);
            Console.WriteLine(ob1.ShowMe());
            Console.WriteLine(ob1.Knit);
 
            AppFactory factory1 = new SportsShirtFactory();
            IApparel ob2 = new ApparelCollector().CollectApparel(factory1);
            Console.WriteLine(ob2.ShowMe());
            Console.WriteLine(ob2.Knit);
 
            System.Threading.Thread.Sleep(100000);
 
        }
    }
}

版权所有:太原市映辉科技有限公司 晋ICP备08000007号

晋公网安备 14010502050535号

联系电话:400-0351-353 联系地址:太原市平阳路96号华康盛世大厦7层 邮编:030012