装饰模式

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 
  7 namespace Decorate
  8 {
  9     class Program
 10     {
 11         static void Main(string[] args)
 12         {
 13             Mobilephone apple = new Apple();
 14             char i; bool s = true;
 15             Console.WriteLine("--------------------------------------");
 16             Console.WriteLine(" ALL function:");
 17             Console.WriteLine(" Bluetooth----1.");
 18             Console.WriteLine(" GPS----2.");
 19             Console.WriteLine(" Camera----3.");
 20             Console.WriteLine(" End----0.");
 21             Console.WriteLine("Please input the choice:");
 22             while (s)
 23             {
 24                
 25                 i = (char)Console.Read();
 26                 if (i == '0') { s=false; }
 27                 if (i == '1')
 28                 {
 29                     Bluetooth bluetooth = new Bluetooth();
 30                     bluetooth.Decorate(apple);
 31                     bluetooth.SendMessage();
 32                     bluetooth.Call();
 33                 }
 34                 if (i == '2')
 35                 {
 36                     GPS gps = new GPS();
 37                     gps.Decorate(apple);
 38                     gps.SendMessage();
 39                     gps.Call();
 40                 }
 41                 if (i == '3')
 42                 {
 43                     Camera camera = new Camera();
 44                     camera.Decorate(apple);
 45                     camera.SendMessage();
 46                     camera.Call();
 47                 }
 48             }
 49         }
 50     }
 51 }
 52 
 53         abstract class Mobilephone
 54         {
 55             public Mobilephone() { }
 56             public abstract void SendMessage();
 57             public abstract void Call();
 58         }
 59         class Apple:Mobilephone
 60         {
 61             public Apple():base()
 62             { }
 63             public override void SendMessage()
 64             {
 65                 Console.WriteLine("Apple Sending Message");
 66             }
 67 
 68             public override void Call()
 69             {
 70                 Console.WriteLine("Apple Calling");
 71             }
 72         }
 73 
 74         class Mi : Mobilephone
 75         {
 76             public Mi()
 77                 : base()
 78             { }
 79             public override void SendMessage()
 80             {
 81                 Console.WriteLine("Mi Sending Message");
 82             }
 83 
 84             public override void Call()
 85             {
 86                 Console.WriteLine("Mi Calling");
 87             }
 88         }
 89 
 90         abstract class Function:Mobilephone
 91         {
 92             private Mobilephone _mobilephone;
 93             public Function() : base() { }
 94             public void Decorate(Mobilephone mobilephone)
 95             {
 96                 _mobilephone = mobilephone;
 97             }
 98             public override void SendMessage()
 99             {
100                 _mobilephone.SendMessage();
101             }
102 
103             public override void Call()
104             {
105                 _mobilephone.Call();
106             }
107         }
108         class Bluetooth:Function
109         {
110             public Bluetooth() : base() { }
111             public override void SendMessage()
112             {
113                 base.SendMessage();
114                 AddBluetooth();
115                 Connect();
116             }
117             public override void Call()
118             {
119                 base.Call();
120                 AddBluetooth();
121                 Connect();
122             }
123             public void AddBluetooth()
124             {
125                 Console.WriteLine("Bluetooth");
126             }
127 
128             public void Connect()
129             {
130                 Console.WriteLine("Connecting");
131             }
132         }
133         class GPS : Function
134         {
135             public GPS() : base() { }
136             public override void SendMessage()
137             {
138                 base.SendMessage();
139                 AddGPS();
140                 location();
141             }
142             public override void Call()
143             {
144                 base.Call();
145                 AddGPS();
146                 location();
147             }
148             public void AddGPS()
149             {
150                 Console.WriteLine("GPS");
151             }
152 
153             public void location()
154             {
155                 Console.WriteLine("Locating");
156             }
157         }
158         class Camera : Function
159         {
160             public Camera() : base() { }
161             public override void SendMessage()
162             {
163                 base.SendMessage();
164                 AddCamera();
165                 Came();
166             }
167             public override void Call()
168             {
169                 base.Call();
170                 AddCamera();
171                 Came();
172             }
173             public void AddCamera()
174             {
175                 Console.WriteLine("Camera");
176             }
177 
178             public void Came()
179             {
180                 Console.WriteLine("Camera is on");
181             }
182         }

原文地址:https://www.cnblogs.com/CHUR/p/5069662.html