實作抽象產品定義的介面,提供 SQL 方式的具體操作邏輯:
using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern.FactoryMethod
{
///
/// Sql 方式操作 Message(ConcreteProduct)
///
public class SqlMessage : AbstractMessage
{
///
/// 獲取 Message
///
/// MessageModel 清單
public override List<MessageModel> Get()
{
List<MessageModel> l = new List<MessageModel>();
l.Add(new MessageModel("SQL方式獲取Message", DateTime.Now));
return l;
}
///
/// 插入 Message
///
/// Message 實體物件
/// 是否成功
public override bool Insert(MessageModel mm)
{
// 程式碼略
return true;
}
}
}
實作相同介面,提供 XML 方式的具體操作邏輯:
using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern.FactoryMethod
{
///
/// XML 方式操作 Message(ConcreteProduct)
///
public class XMLMessage : AbstractMessage
{
///
/// 獲取 Message
///
/// MessageModel 清單
public override List<MessageModel> Get()
{
List<MessageModel> l = new List<MessageModel>();
l.Add(new MessageModel("XML方式獲取Message", DateTime.Now));
return l;
}
///
/// 插入 Message
///
/// Message 實體物件
/// 是否成功
public override bool Insert(MessageModel mm)
{
// 程式碼略
return true;
}
}
}
AbstractMessage,實作 Get() 與 Insert() 抽象方法。AbstractMessage 參考操作,運行時可透明切換 SQL/XML 實作。工廠方法模式將創建責任委派給子類別(具體工廠),而非集中在單一工廠類別中。這使得新增產品類型時無需修改現有工廠代碼,更符合開放封閉原則。