装饰者模式(例子)
根据上述要求来用建造者模式设计程序。
以下是本程序的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 }
输出结果看是否符合要求: