乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)

简介:
[索引页]
[源码下载]


乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)


作者: webabcd


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


示例
有SqlMessage和XmlMessage,用Factory Method来实例化它们。
MessageModel
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.FactoryMethod 

         /// <summary> 
         /// Message实体类 
         /// </summary> 
         public  class MessageModel 
        { 
                 /// <summary> 
                 /// 构造函数 
                 /// </summary> 
                 /// <param name="msg">Message内容</param> 
                 /// <param name="pt">Message发布时间</param> 
                 public MessageModel( string msg, DateTime pt) 
                { 
                         this._message = msg; 
                         this._publishTime = pt; 
                } 
 
                 private  string _message; 
                 /// <summary> 
                 /// Message内容 
                 /// </summary> 
                 public  string Message 
                { 
                        get {  return _message; } 
                        set { _message = value; } 
                } 
 
                 private DateTime _publishTime; 
                 /// <summary> 
                 /// Message发布时间 
                 /// </summary> 
                 public DateTime PublishTime 
                { 
                        get {  return _publishTime; } 
                        set { _publishTime = value; } 
                } 
        } 
}
 
AbstractMessage
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.FactoryMethod 

         /// <summary> 
         /// 操作Message抽象类(Product) 
         /// </summary> 
         public  abstract  class AbstractMessage 
        { 
                 /// <summary> 
                 /// 获取Message 
                 /// </summary> 
                 /// <returns></returns> 
                 public  abstract List<MessageModel> Get(); 
 
                 /// <summary> 
                 /// 插入Message 
                 /// </summary> 
                 /// <param name="mm">Message实体对象</param> 
                 /// <returns></returns> 
                 public  abstract  bool Insert(MessageModel mm); 
        } 
}
 
SqlMessage
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.FactoryMethod 

         /// <summary> 
         /// Sql方式操作Message(ConcreteProduct) 
         /// </summary> 
         public  class SqlMessage : AbstractMessage 
        { 
                 /// <summary> 
                 /// 获取Message 
                 /// </summary> 
                 /// <returns></returns> 
                 public  override List<MessageModel> Get() 
                { 
                        List<MessageModel> l =  new List<MessageModel>(); 
                        l.Add( new MessageModel( "SQL方式获取Message", DateTime.Now)); 
 
                         return l; 
                } 
 
                 /// <summary> 
                 /// 插入Message 
                 /// </summary> 
                 /// <param name="mm">Message实体对象</param> 
                 /// <returns></returns> 
                 public  override  bool Insert(MessageModel mm) 
                { 
                         // 代码略 
                         return  true
                } 
        } 
}
 
XmlMessage
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.FactoryMethod 

         /// <summary> 
         /// Xml方式操作Message(ConcreteProduct) 
         /// </summary> 
         public  class XmlMessage : AbstractMessage 
        { 
                 /// <summary> 
                 /// 获取Message 
                 /// </summary> 
                 /// <returns></returns> 
                 public  override List<MessageModel> Get() 
                { 
                        List<MessageModel> l =  new List<MessageModel>(); 
                        l.Add( new MessageModel( "XML方式获取Message", DateTime.Now)); 
 
                         return l; 
                } 
 
                 /// <summary> 
                 /// 插入Message 
                 /// </summary> 
                 /// <param name="mm">Message实体对象</param> 
                 /// <returns></returns> 
                 public  override  bool Insert(MessageModel mm) 
                { 
                         // 代码略 
                         return  true
                } 
        } 
}
 
AbstractMessageFactory
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.FactoryMethod 

         /// <summary> 
         /// 抽象Message工厂(Creator) 
         /// </summary> 
         public  abstract  class AbstractMessageFactory 
        { 
                 // An Operation 
 
                 /// <summary> 
                 /// 工厂方法 
                 /// </summary> 
                 /// <returns>AbstractMessage</returns> 
                 public  abstract AbstractMessage CreateMessage(); 
        } 
}
 
SqlMessageFactory
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.FactoryMethod 

         /// <summary> 
         /// SqlMessage工厂(ConcreteCreator) 
         /// </summary> 
         public  class SqlMessageFactory : AbstractMessageFactory 
        { 
                 /// <summary> 
                 /// 实现工厂方法,返回SqlMessage对象 
                 /// </summary> 
                 /// <returns></returns> 
                 public  override AbstractMessage CreateMessage() 
                { 
                         return  new SqlMessage(); 
                } 
        } 
}
 
XmlMessageFactory
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.FactoryMethod 

         /// <summary> 
         /// XmlMessage工厂(ConcreteCreator) 
         /// </summary> 
         public  class XmlMessageFactory : AbstractMessageFactory 
        { 
                 /// <summary> 
                 /// 实现工厂方法,返回XmlMessage对象 
                 /// </summary> 
                 /// <returns></returns> 
                 public  override AbstractMessage CreateMessage() 
                { 
                         return  new XmlMessage(); 
                } 
        } 
}
 
client
using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
 
using Pattern.FactoryMethod; 
 
public partial  class FactoryMethod : System.Web.UI.Page 

         protected  void Page_Load( object sender, EventArgs e) 
        { 
                AbstractMessageFactory amf =  new SqlMessageFactory(); 
                AbstractMessage am = amf.CreateMessage(); 
 
                Response.Write(am.Insert( new MessageModel( "插入", DateTime.Now))); 
                Response.Write( "<br />"); 
                Response.Write(am.Get()[0].Message +  " " + am.Get()[0].PublishTime.ToString()); 
                Response.Write( "<br />"); 
 
 
                amf =  new XmlMessageFactory(); 
                am = amf.CreateMessage(); 
 
                Response.Write(am.Insert( new MessageModel( "插入", DateTime.Now))); 
                Response.Write( "<br />"); 
                Response.Write(am.Get()[0].Message +  " " + am.Get()[0].PublishTime.ToString()); 
        } 
}
 
 
运行结果
True
SQL方式获取Message 2007-5-4 22:34:39
True
XML方式获取Message 2007-5-4 22:34:39


参考
http://www.dofactory.com/Patterns/PatternFactory.aspx


OK
[源码下载]
 





     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/344514 ,如需转载请自行联系原作者

相关文章
|
7月前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
3月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
3月前
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
7月前
|
设计模式 算法
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
77 1
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
|
6月前
|
设计模式
设计模式-05建造者模式(Builder Pattern)
设计模式-05建造者模式(Builder Pattern)
|
7月前
|
设计模式 安全 Java
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
该文介绍了一种C++的编程技巧——奇异递归模板模式(CRTP),旨在让派生组件能继承基本组件的特定功能。通过示例展示了如何创建一个`Fighter`接口和`MmaFighter`类,其中`MmaFighter`及其子类如`MmaBantamweightFighter`和`MmaHeavyweightFighter`强制类型安全,确保相同重量级的拳手之间才能进行比赛。这种设计避免了不同重量级拳手间的错误匹配,编译时会报错。CRTP适用于处理类型冲突、参数化类方法和限制方法只对相同类型实例生效的情况。
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
|
7月前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
55 1
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
3月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
1月前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###