• 装饰者模式(例子)


    根据上述要求来用建造者模式设计程序。

    以下是本程序的UML图以及代码:

    1、创建抽象组件类MobilePhone。

    1 public abstract class MobilePhone
    2 {
    3     public String phoneName;
    4     public abstract void SendMessage();
    5     public abstract void Call();
    6 }

    2、分别创建具体组件小米和苹果手机类,继承自MobilePhone。

     MiPhone
     iPhone

    3、创建抽象装饰类Decorator,包含一个MobilePhone类型的私有变量。

    复制代码
     1 public class Decorator extends MobilePhone{
     2 
     3     private MobilePhone _mobilePhone;
     4     
     5     public Decorator(MobilePhone mobilePhone){
     6         _mobilePhone=mobilePhone;
     7         phoneName=mobilePhone.phoneName;
     8     }
     9     @Override
    10     public void SendMessage() {
    11         // TODO Auto-generated method stub
    12         _mobilePhone.SendMessage();
    13     }
    14 
    15     @Override
    16     public void Call() {
    17         // TODO Auto-generated method stub
    18         _mobilePhone.Call();
    19     }
    20 
    21 }
    复制代码

    4、分别创建具体装饰类Bluetooth、GPS、Camera。

     Bluetooth
     GPS
     Camera

    5、书写主函数Main来分别创建小米手机和苹果手机,并且分别加上蓝牙功能、GPS功能和视频通话功能。

    复制代码
     1 public class Main {
     2 
     3     public static void main(String[] args) {
     4         // TODO Auto-generated method stub
     5         MiPhone miPhone=new MiPhone();
     6         iPhone iphone=new iPhone();
     7         
     8         Bluetooth miBluetooth=new Bluetooth(miPhone);
     9         miBluetooth.Connect();
    10         GPS miGPS=new GPS(miPhone);
    11         miGPS.Location="MiPhone的定位成功";
    12         System.out.println(miGPS.Location);
    13         Camera miCamera=new Camera(miPhone);
    14         miCamera.VideoCall();
    15         
    16         Bluetooth iBluetooth=new Bluetooth(iphone);
    17         iBluetooth.Connect();
    18         GPS iGPS=new GPS(iphone);
    19         miGPS.Location="iPhone的定位成功";
    20         System.out.println(miGPS.Location);
    21         Camera iCamera=new Camera(iphone);
    22         iCamera.VideoCall();
    23     }
    24 
    25 }
    复制代码

    输出结果看是否符合要求:

     

  • 相关阅读:
    Vue-基础(四)
    Vue-基础(三)
    Vue-基础(一)
    Vue-基础(二)
    CSS-初始化模板2(common.css)
    CSS-初始化模板1(normalize.css)
    CSS预处理器-Less
    MySQL视窗函数row_number(), rank(), denser_rank()
    LeetCode第4题:寻找两个有序数组的中位数
    无重复字符的最长子串
  • 原文地址:https://www.cnblogs.com/leaderchen/p/5093221.html
Copyright © 2020-2023  润新知