zoukankan      html  css  js  c++  java
  • 装饰模式作业

     下面是本次作业的题目:

    设计的UML类图:

      

    下面是主要的代码:

        

     1 /// <summary>
     2     /// 抽象组件类
     3     /// </summary>
     4      public abstract class MobilePhone
     5      {
     6          public MobilePhone()
     7          { }
     8 
     9          //private string _Location;                     //存储将来需要拓展的定位数据
    10 
    11          public abstract void SendMessage();  //发送短信
    12          public abstract void Call();         //打电话
    13 
    14          //public abstract void Connect();  //将来需要拓展的Bluetooth功能
    15      }
     1   /// <summary>
     2     /// 具体组件类 ApplePhone
     3     /// </summary>
     4     public class ApplePhone:MobilePhone
     5     {
     6         public ApplePhone()
     7         { }
     8 
     9         public override void SendMessage()
    10         {
    11             Console.WriteLine("ApplePhone 现在已经具备了发送短信的功能");
    12         }
    13 
    14         public override void Call()
    15         {
    16             Console.WriteLine("ApplePhone 现在已经具备了普通通信的功能");
    17         }
    18 
    19         //public override void Connect()
    20         //{
    21         //    Console.WriteLine("ApplePhone 现在已经拓展了蓝牙功能,正在连接....");
    22         //}
    23     }
    24 
    25 /// <summary>
    26     /// 具体组件类 MiPhone
    27     /// </summary>
    28     public class MiPhone:MobilePhone
    29     {
    30         public MiPhone()
    31         { }
    32 
    33         public override void SendMessage()
    34         {
    35             Console.WriteLine("MiPhone 现在已经具备了发送短信的功能");
    36         }
    37 
    38         public override void Call()
    39         {
    40             Console.WriteLine("MiPhone 现在已经具备了普通通信的功能");
    41         }
    42 
    43         //public override void Connect()
    44         //{
    45         //    Console.WriteLine("MiPhone 现在已经拓展了蓝牙功能,正在连接....");
    46         //}
    47     }
     1 /// <summary>
     2     /// 抽象装饰类 Function
     3     /// </summary>
     4     public class Function:MobilePhone
     5     {
     6         private MobilePhone _mobilephone;
     7 
     8         public Function(MobilePhone mobilephone)
     9         {
    10             _mobilephone = mobilephone;
    11         }
    12 
    13         public override void SendMessage()
    14         {
    15             _mobilephone.SendMessage();
    16         }
    17 
    18         public override void Call()
    19         {
    20             _mobilephone.Call();
    21         }
    22 
    23         //public override void Connect()
    24         //{
    25         //    _mobilephone.Connect();
    26         //}
    27     }
     1  /// <summary>
     2     /// 具体装饰类 Bluetooth
     3     /// </summary>
     4     public class Bluetooth:Function
     5     {
     6         public Bluetooth(MobilePhone mobilephone)
     7             : base(mobilephone)
     8         {
     9             Console.WriteLine("请您稍等,系统现在正在安装蓝牙功能");
    10             Console.WriteLine("蓝牙功能添加成功");
    11         }
    12 
    13         //public override void Connect()
    14         //{
    15         //    Console.WriteLine("请您稍等,系统现在正在安装蓝牙功能");
    16         //    base.Connect();
    17         //}
    18 
    19         public void Connect()
    20         {
    21             Console.WriteLine("蓝牙正在连接");
    22         }
    23     }
     1 /// <summary>
     2     /// 具体装饰类 GPS
     3     /// </summary>
     4     public class GPS:Function
     5     {
     6         public string Localtion { get; set; }
     7         
     8         public GPS(MobilePhone mobilephone)
     9             : base(mobilephone)
    10         {
    11             
    12         }
    13     }
     1 /// <summary>
     2     /// 具体装饰类 Camera
     3     /// </summary>
     4     public class Camera:Function
     5     {
     6         public Camera(MobilePhone mobilephone)
     7             : base(mobilephone)
     8         {
     9             Console.WriteLine("请您稍等,系统现在正在安装摄像头功能");
    10             Console.WriteLine("摄像头功能添加成功");
    11         }
    12 
    13         //public override void Connect()
    14         //{
    15         //    Console.WriteLine("请您稍等,系统现在正在安装蓝牙功能");
    16         //    base.Connect();
    17         //}
    18 
    19         public override void Call()
    20         {
    21             Console.WriteLine("通信功能升级为带有视频");
    22         }
    23     }
     1         /// <summary>
     2         /// 客户端代码
     3         /// </summary>
     4         /// <param name="args"></param>
     5         static void Main(string[] args)
     6         {
     7             MobilePhone mobilephone = new ApplePhone();
     8             mobilephone.SendMessage();
     9             mobilephone.Call();
    10 
    11             Bluetooth bluetooth = new Bluetooth(mobilephone);
    12             bluetooth.Connect();
    13 
    14             GPS gps = new GPS(bluetooth);
    15             gps.Localtion = "(3,4)";
    16 
    17             Camera camera = new Camera(gps);
    18 
    19             camera.Call();
    20 
    21             Console.ReadLine();
    22 
    23         }

    结果如下图所示:

       

    心得体会:

       感觉自己对于装饰模式的体会仍然停留在较为片面的阶段,依然无法深入的去理解他,希望慢慢体会,也许将来有一天就悟出来了,哈哈。

       打个比方,就在自己写代码的时候,一开始我设想: 先在 MobliePhone 这个抽象组件类中 留下将来需要拓展的功能(蓝牙、Gps、摄像头)的接口(就是上面我注释的部分),然后在调用具体装饰类的时候,去前面的接口中激活需要拓展的功能;但是转念一想,想起了下面的这句话:

                                   

      那么似乎我一开始的设想似乎就违背了上面的这句话。如果之前就都准备好接口了,那么何来动态拓展一说。

      因此,稀里糊涂写下了上面的代码。代码中存在着不少的设计问题,希望在之后自己可以将它们体会出来。

  • 相关阅读:
    docker配置国内加速器
    pwm原理与stm32控制
    【C语言】赋值表达式自增自减逗号表达式
    linux下利用paho.mqtt.c进行mqtt开发 #c编程
    linux下tcp #c编程
    windows下的linux子系统虚拟串口的使用
    linux下搭建mqtt服务器(mosquitto)
    linux下paho.mqtt.c下载安装
    树莓派&mysql数据库
    vscode+mysql数据库编程
  • 原文地址:https://www.cnblogs.com/bldz/p/5088824.html
Copyright © 2011-2022 走看看