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