如何合理创建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);
}
}
}
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);
}
}
}
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);
}
}
}
相关文章推荐
- 如何合理创建c#对象
- 如何合理创建c#对象
- C# 2005如何根据类型声明的字符串反射创建泛型(Generic)对象
- C#下如何通过不添加对Office的引用,而创建Excel对象
- c# 中引用对象如何创建副本
- js之--如何合理的创建对象
- c# 中引用对象如何创建副本
- ulua里如何将C#创建的UnityEngine对象返回给lua
- 如何利用C#创建和调用DLL(转)
- 如何使用 Forms 身份验证创建 GenericPrincipal 对象
- 如何:创建和终止线程(C# 编程指南)
- c# 自定义控件的事件处理函数如何创建
- ABAP--如何创建和使用sap的号码范围对象
- 如何使用 Visual C# .NET 创建用于窗体身份验证的密钥
- 如何根据类名和参数创建对象
- C#使用_如何创建既不能被继承又不能被实例化的类
- C#+ArcEngine 不同格式数据打开,对象创建,导入导出
- 如何创建、发布Web Service和 C#WINFORM里如何调用WEB Service API
- 如何:创建和终止线程(C# 编程指南--MSDN)