| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 1012 人关注过本帖
标题:如何合理创建c#对象
收藏  订阅  推荐  打印 
本主题由 静夜思 于 2008-5-18 21:39 鉴定为原创并加为精华
hebingbing
Rank: 12Rank: 12Rank: 12
来自:泰山学院
等级:版主
威望:10
帖子:3065
积分:32376
注册:2007-10-22
如何合理创建c#对象

创建对象:
通常情况下,人们都不是太重视对象的创建,而是更重视类的设计,但是创建对象确实又很重要。当前比较流行的方法是:工厂创建模式
工厂创建模式中的“工厂”就像真正的工厂,只是创建对象,而且,即使工厂实现有所改变,客户也不会受到影响。
工厂设计模式有两种办法:
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);

        }
    }
}
附件: 只有本站会员才能下载或查看附件,请您 登录注册
搜索更多相关主题的帖子: 对象  工厂  合理  客户  模式  
本帖最近评分记录
  • kevintang +4 精品文章 呵呵 2008-5-19 09:35
2008-5-18 15:28
kevintang
Rank: 4
等级:高级会员
威望:5
帖子:604
积分:6861
注册:2008-2-14

  靠吓我!呵呵
2008-5-19 09:35
xxxxwjj
Rank: 1
等级:新手上路
帖子:7
积分:184
注册:2008-5-15

学习了!~~~~~~~~~~~
2008-5-19 12:22
276632320
Rank: 1
等级:新手上路
帖子:1
积分:110
注册:2008-5-27

刚刚开始怎么做
2008-5-27 21:06
vip5202
Rank: 1
等级:新手上路
帖子:2
积分:120
注册:2008-6-20
我是学计算机的

2008-6-20 10:40
vip5202
Rank: 1
等级:新手上路
帖子:2
积分:120
注册:2008-6-20
我是学计算机

但我学的很少
   不知道在这里面可不可以找到
     我想我东西
2008-6-20 10:42
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.057814 second(s), 11 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved