Adapter Pattern

  

Comments

 

Constructor based linking of different interfaces

 

Code

 

1.	using System;
2.	 
3.	namespace DoFactory.GangOfFour.Adapter.RealWorld
4.	{
5.	  /// 
6.	  /// MainApp startup class for Real-World 
7.	  /// Adapter Design Pattern.
8.	  /// 
9.	  class MainApp
10.	  {
11.	    /// 
12.	    /// Entry point into console application.
13.	    /// 
14.	    static void Main()
15.	    {
16.	      // Non-adapted chemical compound
17.	      Compound unknown = new Compound("Unknown");
18.	      unknown.Display();
19.	 
20.	      // Adapted chemical compounds
21.	      Compound water = new RichCompound("Water");
22.	      water.Display();
23.	 
24.	      Compound benzene = new RichCompound("Benzene");
25.	      benzene.Display();
26.	 
27.	      Compound ethanol = new RichCompound("Ethanol");
28.	      ethanol.Display();
29.	 
30.	      // Wait for user
31.	      Console.ReadKey();
32.	    }
33.	  }
34.	 
35.	  /// 
36.	  /// The 'Target' class
37.	  /// 
38.	  class Compound
39.	  {
40.	    protected string _chemical;
41.	    protected float _boilingPoint;
42.	    protected float _meltingPoint;
43.	    protected double _molecularWeight;
44.	    protected string _molecularFormula;
45.	 
46.	    // Constructor
47.	    public Compound(string chemical)
48.	    {
49.	      this._chemical = chemical;
50.	    }
51.	 
52.	    public virtual void Display()
53.	    {
54.	      Console.WriteLine("\nCompound: {0} ------ ", _chemical);
55.	    }
56.	  }
57.	 
58.	  /// 
59.	  /// The 'Adapter' class
60.	  /// 
61.	  class RichCompound : Compound
62.	  {
63.	    private ChemicalDatabank _bank;
64.	 
65.	    // Constructor
66.	    public RichCompound(string name)
67.	      : base(name)
68.	    {
69.	    }
70.	 
71.	    public override void Display()
72.	    {
73.	      // The Adaptee
74.	      _bank = new ChemicalDatabank();
75.	 
76.	      _boilingPoint = _bank.GetCriticalPoint(_chemical, "B");
77.	      _meltingPoint = _bank.GetCriticalPoint(_chemical, "M");
78.	      _molecularWeight = _bank.GetMolecularWeight(_chemical);
79.	      _molecularFormula = _bank.GetMolecularStructure(_chemical);
80.	 
81.	      base.Display();
82.	      Console.WriteLine(" Formula: {0}", _molecularFormula);
83.	      Console.WriteLine(" Weight : {0}", _molecularWeight);
84.	      Console.WriteLine(" Melting Pt: {0}", _meltingPoint);
85.	      Console.WriteLine(" Boiling Pt: {0}", _boilingPoint);
86.	    }
87.	  }
88.	 
89.	  /// 
90.	  /// The 'Adaptee' class
91.	  /// 
92.	  class ChemicalDatabank
93.	  {
94.	    // The databank 'legacy API'
95.	    public float GetCriticalPoint(string compound, string point)
96.	    {
97.	      // Melting Point
98.	      if (point == "M")
99.	      {
100.	        switch (compound.ToLower())
101.	        {
102.	          case "water": return 0.0f;
103.	          case "benzene": return 5.5f;
104.	          case "ethanol": return -114.1f;
105.	          default: return 0f;
106.	        }
107.	      }
108.	      // Boiling Point
109.	      else
110.	      {
111.	        switch (compound.ToLower())
112.	        {
113.	          case "water": return 100.0f;
114.	          case "benzene": return 80.1f;
115.	          case "ethanol": return 78.3f;
116.	          default: return 0f;
117.	        }
118.	      }
119.	    }
120.	 
121.	    public string GetMolecularStructure(string compound)
122.	    {
123.	      switch (compound.ToLower())
124.	      {
125.	        case "water": return "H20";
126.	        case "benzene": return "C6H6";
127.	        case "ethanol": return "C2H5OH";
128.	        default: return "";
129.	      }
130.	    }
131.	 
132.	    public double GetMolecularWeight(string compound)
133.	    {
134.	      switch (compound.ToLower())
135.	      {
136.	        case "water": return 18.015;
137.	        case "benzene": return 78.1134;
138.	        case "ethanol": return 46.0688;
139.	        default: return 0d;
140.	      }
141.	    }
142.	  }
143.	}
144.	 
145.	 
146.	        
147.

Output

Compound: Unknown ------

Compound: Water ------
 Formula: H20
 Weight : 18.015
 Melting Pt: 0
 Boiling Pt: 100

Compound: Benzene ------
 Formula: C6H6
 Weight : 78.1134
 Melting Pt: 5.5
 Boiling Pt: 80.1

Compound: Alcohol ------
 Formula: C2H6O2
 Weight : 46.0688
 Melting Pt: -114.1
 Boiling Pt: 78.3