您的位置:首页 > 编程语言 > C#

如何合理创建c#对象

2008-09-06 16:56 351 查看

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

}

}

}







QQ截图未命名.jpg (4.62 KB)

2008-5-18 15:28

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);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: