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 }

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

  • 相关阅读:
    HLG 1522 子序列的和【队列的应用】
    POJ 3273 Monthly Expense【二分】
    HDU 4004 The Frog's Games 【二分】
    POJ 2001 Shortest Prefixes【第一棵字典树】
    POJ 2823 Sliding Window【单调对列经典题目】
    HDU 1969 Pie 【二分】
    POJ 3125 Printer Queue【暴力模拟】
    POJ 3250 Bad Hair Day【单调栈】
    字典树【模板】
    验证码 Code
  • 原文地址:https://www.cnblogs.com/supercyr/p/5086792.html
Copyright © 2011-2022 走看看