设计模式之美:Factory Method(工厂方法)(二)
return new ConcreteGoodProduct();
17 case ProductCategory.BadProduct:
18 return new ConcreteBadProduct();
19 default:
20 throw new NotSupportedException();
21 }
22 }
23 }
24
25 public abstract class AbstractOrInterfaceOfProduct
26 {
27 }
28
29 public class ConcreteGoodProduct : AbstractOrInterfaceOfProduct
30 {
31 }
32
33 public class ConcreteBadProduct : AbstractOrInterfaceOfProduct
34 {
35 }
36
37 public partial class Test
38 {
39 public void Case3()
40 {
41 ConcreteCreator creator = new ConcreteCreator();
42 AbstractOrInterfaceOfProduct product = creator.CreateProduct(ProductCategory.GoodProduct);
43 }
44 }
45 }
实现方式(四):使用模板以避免创建子类。
使用C#中的泛型实现工厂方法。
1 namespace FactoryMethodPattern.Implementation4
2 {
3 public abstract class AbstractOrInterfaceOfCreator
4 {
5 public abstract AbstractOrInterfaceOfProduct CreateProduct();
6 }
7
8 public class GenericConcreteCreator : AbstractOrInterfaceOfCreator
9 where T : AbstractOrInterfaceOfProduct, new()
10 {
11 public AbstractOrInterfaceOfProduct CreateProduct()
12 {
13 return new T();
14 }
15 }
16
17 public abstract class AbstractOrInterfaceOfProduct
18 {
19 }
20
21 public class ConcreteGoodProduct : AbstractOrInterfaceOfProduct
22 {
23 }
24
25 public class ConcreteBadProduct : AbstractOrInterfaceOfProduct
26 {
27 }
28
29 public partial class Test
30 {
31 public void Case3()
32 {
33 AbstractOrInterfaceOfCreator creator1 = new GenericConcreteCreator();
34 AbstractOrInterfaceOfCreator creator2 = new GenericConcreteCreator();
35 AbstractOrInterfaceOfProduct product1 = creator1.CreateProduct();
36 AbstractOrInterfaceOfProduct product2 = creator2.CreateProduct();
37 }
38 }
39 }