zoukankan      html  css  js  c++  java
  • 设计模式(二):工厂方法

    一、定义

    第一篇简单工厂方法讲到,后续添加服务的时候会直接修改工厂类,因为他控制了实例化哪个类。

    工厂方法,就让实例化推迟到了子类。怎样推迟?在子类中实例化呗。

    二、实例

    之前的服务不变,将简单的工厂的工厂类拆分成,每个case对应一个具体的工厂,这样也就只创建一个服务类。

    这里的两个工厂BLFactory和WCFFactory依次对应创建BL和WCf.

     

    服务类:

     public interface IService
        {
        }
    
    
     public class BL:IService
        {
          public  BL()
            {
                Console.WriteLine("启动 : BL服务.");           
            }
        }
    
    
    public class WCF : IService
        {
            public WCF()
            {
                Console.WriteLine("启动 : WCF服务.");
            }
        }

    工厂类:每个工厂对应创建一个服务,这样就将实例化推迟到了子类—具体的工厂

     public abstract class FactoryBuilder
        {
            public abstract IService Creat();        
        }
    
        public class WCFFactory : FactoryBuilder
        {
            public override IService Creat()
            {
                return new WCF();
            }
        }
    
        public class BLFactory : FactoryBuilder
        {
            public override IService Creat()
            {
                return new BL();
            }
        }

    客户端:

    //工厂模式
     Factory2.FactoryBuilder fb = new Factory2.WCFFactory();
     Factory2.IService service2 = fb.Creat();

    三、优缺点:

    优:将实例化推迟到了子类,具体的工厂类。每个工厂类维护创建一种服务。

    缺:如果后期需要添加更多的服务,那就可能需要创建更多的具体的工厂类。

    如果业务简单,我觉得不如用简单工厂,可读性高,一目了然。当然随着业务的复杂,我们可以升级这种设计。

  • 相关阅读:
    gThumb 3.1.2 发布,支持 WebP 图像
    航空例行天气预报解析 metaf2xml
    Baruwa 1.1.2 发布,邮件监控系统
    Bisect 1.3 发布,Caml 代码覆盖测试
    MoonScript 0.2.2 发布,基于 Lua 的脚本语言
    Varnish 入门
    快速增量备份程序 DeltaCopy
    恢复模糊的图像 SmartDeblur
    Cairo 1.12.8 发布,向量图形会图库
    iText 5.3.4 发布,Java 的 PDF 开发包
  • 原文地址:https://www.cnblogs.com/sunchong/p/5100541.html
Copyright © 2011-2022 走看看