Enjoy meta mode (Flyweight pattern)
Introduced
Use shared technology to effectively support a large number of fine-grained objects.
Example
There is a message entity class, and some objects have an insert () and get () method for its operations, and these objects are now supported using shared technology.
Messagemodel
Using system;using system.collections.generic;using system.text;namespace pattern.flyweight{//<summary>// Message entity class///</summary> public class Messagemodel {//<summary>///constructor// /</summary>//<param name= "msg" >message content </param>//<param name= "PT" >message when released Room </param> public Messagemodel (String msg, DateTime pt) {this._message = msg; This._publishtime = pt; } private string _message; <summary>//message content///</summary> public string Message {get {return _message;} set {_message = value;} } private DateTime _publishtime; <summary>//Message release time///</summary> public DateTime Publishtime { get {return _publishtime;} set {_publishtime = value;} }}}
Abstractmessage
Using system;using system.collections.generic;using system.text;namespace pattern.flyweight{// <summary > ///Operation Message abstract class (Flyweight) ///</summary> public abstract class Abstractmessage {/ <summary>///Get Message///</summary>// <returns></returns> Public Abstract list<messagemodel> Get (); <summary>///INSERT message///</summary>// <param name= "MM" >message entity object </ param> //<returns></returns> public abstract bool Insert (Messagemodel mm);} }
Sqlmessage
Using system;using system.collections.generic;using system.text;namespace pattern.flyweight{// <summary > ///SQL Operation message (concreteflyweight)/// </summary> Public class Sqlmessage: Abstractmessage {//<summary>/// Get message//</summary>// <returns> </returns> public override list<messagemodel> Get () { list<messagemodel> l = new List <MessageModel> (); L.add (New Messagemodel ("SQL Get Message", DateTime.Now)); return l; } <summary>///INSERT message///</summary>// <param name= "MM" >message entity object </ param> //<returns></returns> public override bool Insert (Messagemodel mm) { // The code is slightly return true;}} }
Xmlmessage
Using system;using system.collections.generic;using system.text;namespace pattern.flyweight{// <summary > ///XML operation message (Concreteflyweight)/// </summary> Public class Xmlmessage: Abstractmessage {//<summary>/// Get message//</summary>// <returns> </returns> public override list<messagemodel> Get () { list<messagemodel> l = new List <MessageModel> (); L.add (New Messagemodel ("XML Get Message", DateTime.Now)); return l; } <summary>///INSERT message///</summary>// <param name= "MM" >message entity object </ param> //<returns></returns> public override bool Insert (Messagemodel mm) { // The code is slightly return true;}} }
Messagefactory
Using system;using system.collections.generic;using system.text;namespace pattern.flyweight{//<summary>// Message Factory (Flyweightfactory)///</summary> public class Messagefactory {private Dictionary<stri Ng, abstractmessage> _messageobjects = new dictionary<string, abstractmessage> (); <summary>///Get Message object///</summary>//<param name= "key" >key</param> ; <returns></returns> Public abstractmessage Getmessageobject (string key) {Abstrac Tmessage messageobject = null; if (_messageobjects.containskey (key)) {messageobject = _messageobjects[key]; } else {switch (key) {case ' xml ': Messageobject = New Sqlmessage (); Break Case "SQL": Messageobject = new Xmlmessage (); Break } _messageobjects.add (key, Messageobject); } return messageobject; } }}
Test
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.flyweight;public Partial Class flyweight:system.web.ui.page{protected void Page_Load (object sender, EventArgs e) {string[] ary = n EW string[] {"xml", "SQL"}; Messagefactory messagefactory = new Messagefactory (); foreach (string key in ary) {abstractmessage messageobject = Messagefactory.getmessageobject (key); Response.Write (Messageobject.insert (New Messagemodel ("Insert", DateTime.Now)); Response.Write ("<br/>"); Response.Write (Messageobject.get () [0]. Message + "" + messageobject.get () [0]. Publishtime.tostring ()); Response.Write ("<br/>"); } }}
Run results
True
SQL Get message 2007-5-17 22:20:38
True
XML way to get message 2007-5-17 22:20:38
24 Design modes: Enjoy meta mode (Flyweight pattern)