一个类,在不修改此类的情况下为此类添加其他的功能。
在别的博客看到的一个评论,侵删。
代理模式与装饰器模式的区别:
代理模式偏向于一个控制器,就是把被代理对象的控制权交给了代理对象,由代理对象决定被代理对象是否执行,如何执行
装饰模式偏向于一个和花瓶,只能在被装饰对象前后加入一点东西,并不会去阻止执行的
package com.lt.designpatterns;
/**
* 自己手写一个装饰器模式
*/
public class DecoratorClient
{
public static void main(String[] args)
{
System.out.println("最原始的功能:");
Phone phone = new CallOnlyPhone();
phone.use();
System.out.println("加入装饰器之后:");
Phone musicPhone = new MusicPhone(phone);
musicPhone.use();
}
}
/**
* 电话
*/
interface Phone
{
void use();
}
/**
* 只能打电话
*/
class CallOnlyPhone implements Phone
{
@Override
public void use()
{
System.out.println("打电话");
}
}
/**
* 装饰器
*/
class Decorator implements Phone
{
protected Phone phone;
public Decorator(Phone phone)
{
this.phone = phone;
}
@Override
public void use()
{
this.phone.use();
}
}
/**
* 添加播放器功能
*/
class MusicPhone extends Decorator
{
public MusicPhone(Phone phone)
{
super(phone);
}
public void use()
{
System.out.println("加入音乐播放功能");
this.phone.use();
}
}