| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4057 人关注过本帖, 2 人收藏
标题:如何合理创建c#对象
只看楼主 加入收藏
hebingbing
Rank: 6Rank: 6
来 自:黄土高坡
等 级:贵宾
威 望:27
帖 子:3417
专家分:371
注 册:2007-10-22
结帖率:84.21%
收藏(2)
 问题点数:0 回复次数:5 
如何合理创建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);

        }
    }
}
收到的鲜花
  • kevintang2008-05-19 09:35 送鲜花  4朵   附言:精品文章 呵呵
搜索更多相关主题的帖子: 对象 工厂 合理 客户 模式 
2008-05-18 15:28
kevintang
Rank: 4
等 级:业余侠客
威 望:9
帖 子:799
专家分:236
注 册:2008-2-14
收藏
得分:0 
  靠吓我!呵呵
2008-05-19 09:35
xxxxwjj
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-5-15
收藏
得分:0 
学习了!~~~~~~~~~~~
2008-05-19 12:22
276632320
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-5-27
收藏
得分:0 
刚刚开始怎么做
2008-05-27 21:06
vip5202
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-6-20
收藏
得分:0 
我是学计算机的
2008-06-20 10:40
vip5202
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-6-20
收藏
得分:0 
我是学计算机
但我学的很少
   不知道在这里面可不可以找到
     我想我东西
2008-06-20 10:42
快速回复:如何合理创建c#对象
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020543 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved