设计模式--装饰模式

本文通过具体实例解释了装饰模式的概念及其应用。装饰模式允许在不改变原有对象的基础上为其添加新的功能,这种方式比传统的继承更加灵活。文章还展示了如何利用装饰模式为简单的USB设备添加额外的功能。

设计模式--装饰模式

装饰模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

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(){//其实执行的是IUSBReadData

usb.readData();

}

publicvoidwriteData(){//其实执行的是IUSBWriteData

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();//具有照相的功能

}

}

在此程序中反复用到了抽象类、接口、继承及覆盖,而对此又有了新的深入见解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值