设计模式--装饰模式
装饰模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
M(超级玛丽)
--------------------------
普通继承模式实现
A发镖 能组合出七种功能 M1:A M4:AB
B变身 M2:B M5:AC
C无敌 M3:C M6:BC M7:AB
---------------------------
M
|--M1 AB组合方法:newM2(M1)
|--M2 AC组合方法:newM3(M1)
|--M3 BC组合方法:newM3(M2)
ABC组合方法:newM3(M2(M1))
====================================
IUsb(接口,其功能为读数据与写数据)
|--UDisk(类继承IUsb,其方法只有读写数据)
|--MP3Player(类继承IUsb,其方法只有读写数据)
|--Decorator(IUsbiusb)
|--MusicPlayer(IUsbusb)
|--Camera(IUsbusb)
publicinterfaceIUsb{
publicvoidreadData();
publicvoidwriteData();
}
//U盘
publicclassUDiskimplementsIUsb{
publicvoidreadData(){
System.out.println("U盘读数据...");
}
publicvoidwriteData(){
System.out.println("U盘写数据...");
}
}
publicMP3PlayimplementsIUsb{
publicvoidreadData(){
System.out.println("MP3读数据...");
}
publicvoidwriteData(){
System.out.println("MP3写数据...");
}
}
publicclassDecoratorimplementsIUsb{
privateIUsbusb;
publicDecorator(IUsb_usb){
usb=_usb;
}
publicvoidreadData(){//其实执行的是IUSB的ReadData
usb.readData();
}
publicvoidwriteData(){//其实执行的是IUSB的WriteData
usb.writeData();
}
}
//音乐播放器,提供播放音乐的功能
publicclassMusicPlayerextendsDecorator{
publicMusicPlayer(IUsbusb){
super(usb);
}
publicvoidplayMusic(){
System.out.println("播放音乐...");
}
}
//照相机
publicclassCameraextendsDecorator{
publicCamera(IUsbusb){
super(usb);
}
publicvoidtakePicture(){
System.out.println("照相...");
}
}
publicclassTestDecorator{
publicstaticvoidmain(String[]args){
IUsbmp3player=newMP3Player();//只能读写数据的mp3
MusicPlayerplayer=newMusicPlayer(mp3player)//装饰音乐播放
player.readData();
player.writeData();
player.playMusic();//具有播放音乐的功能
Cameramp3Carm=newCamera(player);
mp3Carm.takePicture();//具有照相的功能
}
}
在此程序中反复用到了抽象类、接口、继承及覆盖,而对此又有了新的深入见解。
本文通过具体实例解释了装饰模式的概念及其应用。装饰模式允许在不改变原有对象的基础上为其添加新的功能,这种方式比传统的继承更加灵活。文章还展示了如何利用装饰模式为简单的USB设备添加额外的功能。

1586

被折叠的 条评论
为什么被折叠?



