IChemical
1using System; 2 3namespace Gof.Test.Flyweight 4{ 5 public interface IChemical 6 { 7 string Name{get;} 8 string Symbol {get;} 9 double AtomicWeight{get;}10 }11}
ChemicalFactory
1using System; 2using System.Collections; 3 4namespace Gof.Test.Flyweight 5{ 6 public class ChemicalFactory 7 { 8 private static Hashtable _chemicals = new Hashtable(); 9 private class ChemicalImpl:IChemical10 {11 public ChemicalImpl(string name,string symbol,double atomicweight)12 {13 _name = name;14 _symbol = symbol;15 _atomicWeight = atomicweight;16 }17 public string Name18 {19 get20 {21 return _name;22 }23 set24 {25 _name = value;26 }27 }private string _name = string.Empty;28 public string Symbol29 {30 get31 {32 return _symbol;33 }34 set35 {36 _symbol = value;37 }38 }private string _symbol = string.Empty;39 public double AtomicWeight40 {41 get42 {43 return _atomicWeight;44 }45 set46 {47 _atomicWeight = value;48 }49 }private double _atomicWeight = 0;50 }51 static ChemicalFactory()52 {53 _chemicals["carbon"] = new ChemicalImpl("Carbon","c",12);54 _chemicals["sulfur"] = new ChemicalImpl("sulfur","s",32);55 _chemicals["saltpeter"] = new ChemicalImpl("saltpeter","KN03",101);56 //57 }58 public static IChemical GetChemical(string name)59 {60 return (IChemical)_chemicals[name.ToLower()];61 }62 }63}
Substance
1using System; 2 3namespace Gof.Test.Flyweight 4{ 5 public class Substance 6 { 7 private IChemical _chemical; 8 public Substance() 9 {}10 public Substance(string name)11 {12 _chemical = ChemicalFactory.GetChemical(name);13 }14 public Substance(string name,double grams):this(name)15 {16 _grams = grams;17 }18 public double Grams19 {20 get21 {22 return _grams;23 }24 set25 {26 _grams = value;27 }28 }private double _grams = 0;29 public string Name30 {31 get32 {33 return _chemical.Name;34 }35 }36 public string Symbol37 {38 get39 {40 return _chemical.Symbol;41 }42 }43 public double AtomicWeight44 {45 get46 {47 return _chemical.AtomicWeight;48 }49 }50 public double Modles51 {52 get53 {54 return _grams/AtomicWeight;55 }56 }57 }58}
MIxture
1using System; 2using System.Collections; 3 4namespace Gof.Test.Flyweight 5{ 6 public class Mixture:IList 7 { 8 public Mixture() 9 {} 10 11 private ArrayList _list = new ArrayList(); 12 13 ICollection 成员#region ICollection 成员 14 15 public bool IsSynchronized 16 { 17 get 18 { 19 return _list.IsSynchronized; 20 } 21 } 22 23 public int Count 24 { 25 get 26 { 27 return _list.Count; 28 } 29 } 30 31 public void CopyTo(Array array, int index) 32 { 33 _list.CopyTo(array,index); 34 } 35 36 public object SyncRoot 37 { 38 get 39 { 40 return _list.SyncRoot; 41 } 42 } 43 44 #endregion 45 46 IEnumerable 成员#region IEnumerable 成员 47 48 public IEnumerator GetEnumerator() 49 { 50 return _list.GetEnumerator(); 51 } 52 53 #endregion 54 55 IList 成员#region IList 成员 56 57 public bool IsReadOnly 58 { 59 get 60 { 61 return _list.IsReadOnly; 62 } 63 } 64 65 public object this[int index] 66 { 67 get 68 { 69 return _list[index]; 70 } 71 set 72 { 73 _list[index] = value; 74 } 75 } 76 77 public void RemoveAt(int index) 78 { 79 _list.RemoveAt(index); 80 } 81 82 void IList.Insert(int index, object value) 83 { 84 _list.Insert(index,value); 85 } 86 87 public void Insert(int index, Substance value) 88 { 89 ((IList)this).Insert(index,value); 90 } 91 92 void IList.Remove(object value) 93 { 94 _list.Remove(value); 95 } 96 97 public void Remove(Substance value) 98 { 99 ((IList)this).Remove(value);100 }101102 bool IList.Contains(object value)103 {104 return _list.Contains(value);105 }106107 public bool Contains(Substance value)108 {109 return ((IList)this).Contains(value);110 }111112 public void Clear()113 {114 _list.Clear();115 }116117 int IList.IndexOf(object value)118 {119 return _list.IndexOf(value);120 }121122 public int IndexOf(Substance value)123 {124 return ((IList)this).IndexOf(value);125 }126127 int IList.Add(object value)128 {129 return _list.Add(value);130 }131132 public int Add(Substance value)133 {134 return ((IList)this).Add(value);135 }136137 public bool IsFixedSize138 {139 get140 {141 return _list.IsFixedSize;142 }143 }144145 #endregion146147 Override Methods#region Override Methods148 public override string ToString()149 {150 string results = string.Empty;151 for(int i = 0;i < _list.Count;i++)152 {153 results += ((Substance)_list[i]).Name+" ";154 }155 return results;156 }157158 #endregion159 }160}
客户代码
1 Gof.Test.Flyweight.Mixture blackpowder = new Gof.Test.Flyweight.Mixture();2 blackpowder.Add(new Substance("sulfur"));3 blackpowder.Add(new Substance("saltpeter"));4 blackpowder.Add(new Substance("carbon"));5 Console.WriteLine( blackpowder.ToString() );6 Console.ReadLine();
转载于:https://www.cnblogs.com/nanshouyong326/archive/2007/01/08/614756.html
转载请注明原文地址: https://win8.8miu.com/read-1483709.html