• 设计模式:工厂方法模式(Factory Method) 明


    作者:TerryLee  创建于:2005-12-09 出处:http://terrylee.cnblogs.com/archive/2006/01/04/310716.html  摘录于:2013-02-28

    结构图


       

    意图


     定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

     适用性


    • 当一个类不知道它所必须创建的对象的类的时候。
    • 当一个类希望由它的子类来指定它所创建的对象的时候。
    • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。 

    实现代码


    现在我们考虑一个日志记录的例子假定我们要设计日志记录的类,支持记录的方法有FileLog和EventLog两种方式。在这里我们先不谈设计模式,那么这个日志记录的类就很好实现了。

     1 using System;
     2 namespace Log
     3 {
     4     public abstract class Log
     5     {
     6         public abstract void Write();
     7     }
     8     // EventLog类
     9     public class EventLog : Log
    10     {
    11         public override void Write()
    12         {
    13             Console.WriteLine("EventLog Write Success!");
    14         }
    15     }
    16     // FileLog类
    17     public class FileLog : Log
    18     {
    19         public override void Write()
    20         {
    21             Console.WriteLine("FileLog Write Success!");
    22         }
    23     }
    24 }
    25 namespace LogFactory
    26 {
    27     using Log;
    28     // LogFactory类
    29     public abstract class LogFactory
    30     {
    31         public abstract Log Create();
    32     }
    33     // EventFactory类
    34     public class EventFactory : LogFactory
    35     {
    36         public override Log Create()
    37         {
    38             return new EventLog();
    39         }
    40     }
    41     // FileFactory类
    42     public class FileFactory : LogFactory
    43     {
    44         public override Log Create()
    45         {
    46             return new FileLog();
    47         }
    48     }
    49 }
    50 namespace Customer
    51 {
    52     using Log;
    53     using LogFactory;
    54     public class Program
    55     {
    56         public static void Main(string[] args)
    57         {
    58             LogFactory factory = new EventFactory();
    59             Log log = factory.Create();
    60             log.Write();
    61             Console.Read();
    62         }
    63     }
    64 }

    实现要点


    1.  Factory Method模式的两种情况:一是Creator类是一个抽象类且它不提供它所声明的工厂方法的实现;二是Creator是一个具体的类且它提供一个工厂方法的缺省实现。

    2.  工厂方法是可以带参数的。
    3.  工厂的作用并不仅仅只是创建一个对象,它还可以做对象的初始化,参数的设置等。

    效果


    1.  用工厂方法在一个类的内部创建对象通常比直接创建对象更灵活。

    2.  Factory Method模式通过面向对象的手法,将所要创建的具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。

  • 相关阅读:
    [C#] override和overload的区别
    [ASP.Net] 20141228_Dapper文章搜集
    JSP
    Ajax使用简介
    编写JAVA脚本的JSP页面
    JAVA web开发模式
    JSP基础
    过滤器
    监听会话范围内事件
    http解析
  • 原文地址:https://www.cnblogs.com/Ming8006/p/2936790.html
Copyright © 2020-2023  润新知