当前位置:首页 > 通信资讯 > 正文

c#简单工厂设计模式例子(c#简单工厂模式)

1. 概述:

  定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。

2. 模式中的角色

  2.1 抽象工厂(creator):这个抽象类(或接口)声明一个创建对象的工厂方法,用来返回一个product类型的对象。

  2.2 具体工厂(concretecreator):重定义工厂方法,返回一个具体的concrete product实例。

  2.3 抽象产品(product):定义工厂方法所创建的对象。

  2.4 具体产品(concreteproduct): 具体产品,继承自product抽象类。

3. 模式解读

  3.1 工厂方法模式的一般化类图

c#简单工厂设计模式例子(c#简单工厂模式)

  3.2 工厂方法模式的代码实现

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 /// <summary> /// 抽象工厂,声明了一个创建product的方法 /// </summary> public abstract class creator { /// <summary> /// 该方法用来返回product产品 /// </summary> /// <returns></returns> public abstract product createproduct(); } /// <summary> /// 具体产工厂,产品类 a 的创建者,继承自抽象工厂creator /// </summary> public class productacreator : creator { public override product createproduct() { return new concreteproducta(); } } /// <summary> /// 具体产工厂,产品类 b 的创建者,继承自抽象工厂creator /// </summary> public class productbcreator : creator { public productbcreator() { } public override product createproduct() { return new concreteproductb(); } } /// <summary> /// 抽象产品,定义工厂方法中所创建的对象 /// </summary> public abstract class product { public product() { } public abstract void opration(); } /// <summary> /// 具体产品a,继承自product /// </summary> public class concreteproducta : product { public concreteproducta() { } public override void opration() { // this is product a } } /// <summary> /// 具体产品b,继承自product /// </summary> public class concreteproductb : product { public concreteproductb() { } public override void opration() { // this is product b } }

4. 模式总结

  4.1 优点:

    工厂方法去除了条件分支(解除了工厂类与分支的耦合),解决了简单工厂对修改开放的问题。
  4.2 缺点:
    工厂方法模式实现时,客户端需要决定实例化哪个工厂来实现对具体产品的构建,选择判断依然存在,也就是说,工厂方法模式将简单工厂的逻辑判断交给客户端去处理。

    对简单工厂模式来说,增加功能是要修改工厂类的;但对工厂方法模式,修改的是客户端。
  4.3 使用场景:
    对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。
    子类的数量不固定,随时可能有新的功能子类出现

以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持服务器之家。

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。