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

    以下是本程序的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。

     1 public class MiPhone extends MobilePhone{
     2 
     3     public MiPhone() {
     4         // TODO Auto-generated constructor stub
     5         phoneName="MiPhone";
     6     }
     7     @Override
     8     public void SendMessage() {
     9         // TODO Auto-generated method stub
    10         System.out.println( phoneName+"'s SendMessage." );
    11     }
    12 
    13     @Override
    14     public void Call() {
    15         // TODO Auto-generated method stub
    16         System.out.println( phoneName+"'s Call.");
    17     }
    18 
    19 }
    20 
    21 MiPhone

    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。

     1 public class Bluetooth extends Decorator{
     2 
     3     public Bluetooth(MobilePhone mobilePhone) {
     4         super(mobilePhone);
     5         // TODO Auto-generated constructor stub
     6     }
     7     
     8     public void Connect()
     9     {
    10         System.out.println( phoneName+"增加蓝牙功能。" );
    11     }
    12 }
    13 
    14 Bluetooth
     1 public class GPS extends Decorator{
     2 
     3     public GPS(MobilePhone mobilePhone) {
     4         super(mobilePhone);
     5         // TODO Auto-generated constructor stub
     6     }
     7 
     8     public String Location;
     9 }
    10 
    11 GPS
     1 public class Camera extends Decorator{
     2 
     3     public Camera(MobilePhone mobilePhone) {
     4         super(mobilePhone);
     5         // TODO Auto-generated constructor stub
     6     }
     7 
     8     public void VideoCall(){
     9         System.out.println(phoneName+"增加视频电话功能。");
    10     }
    11 }
    12 
    13 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 }

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

  • 相关阅读:
    跑酷游戏的一些bug总结(滥用FixedUpdate的坑)
    Unity在编辑器状态下清空控制台信息
    Unity脚本在层级面板中的执行顺序测试3
    IronPython使用
    RSA加密的测试demo
    常用加密算法学习
    c#读写ini文件
    Jrebel激活方法(转)
    ThreadLocal Memory Leak in Java web application
    Java Thread Local – How to use and code sample(转)
  • 原文地址:https://www.cnblogs.com/supercyr/p/5086792.html
Copyright © 2011-2022 走看看