惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
博客园 - Franky
V
V2EX
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
T
The Blog of Author Tim Ferriss
罗磊的独立博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Jina AI
Jina AI
博客园 - 叶小钗
F
Fortinet All Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
D
Docker
博客园 - 【当耐特】
阮一峰的网络日志
阮一峰的网络日志

博客园 - icwin

在LINUX下进行C语言编程所需要的基础知识 路由器的“心脏”技术 软件费用的组成 如何利用C#创建和调用DLL收藏 如何利用C#创建和调用DLL | C#中创建和使用资源动态链接库收藏 Nobi's StatusChart - 野比的状态波形图控件 C#调用API的一些基础(希望有人用的上) MD5加密简介以及C#下的操作实现 【转】C#项目打包,并自动安装SQL数据库 手把手教你用C#打包应用程序(安装程序)【卸载模块已添加】 C#.NET中存取数据库入门贴(ADO.NET) http://bbs.bccn.net/ .NET开发中的一些小技巧收藏 C#读取Excel数据收藏 C#文件夹和文件的常见操作收藏 C#实现重启应用程序收藏 C#实现SQL数据库备份与恢复 C#备份和还原SQL数据库
如何合理创建c#对象
icwin · 2008-09-06 · via 博客园 - icwin

如何合理创建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);

        }
    }
}