先上代码:
/// <summary> /// 抽象类产品 /// </summary> abstract class Product { public void MethodSame() { Console.WriteLine("MethodSame"); } public abstract void MethodDiff(); } /// <summary> /// 具体实现A /// </summary> class ConcreteProductA : Product { public override void MethodDiff() { Console.WriteLine("ConcreteProductA:MethodDiff"); } } /// <summary> /// 具体实现B /// </summary> class ConcreteProductB : Product { public override void MethodDiff() { Console.WriteLine("ConcreteProductB:MethodDiff"); } } /// <summary> /// 工厂方法 /// </summary> class Factory { public static Product GetProduct(string args) { Product product = null; if (args.Equals("A")) { product = new ConcreteProductA(); } else if (args.Equals("B")) { product = new ConcreteProductB(); } return product; } } //调用方法 static void Main(string[] args) { Product product; product = Factory.GetProduct("A"); product.MethodSame(); product.MethodDiff(); product = Factory.GetProduct("B"); product.MethodSame(); product.MethodDiff(); Console.ReadLine(); }
将抽象类的具体初始化过程封装在工厂类中,对外不可见。