在学习代理模式的时候发现装饰者模式和代理模式极其相似,所以又研究了下装饰者模式:
一. 定义
装饰模式是在不修改原类和集成原类的情况下对类进行功能的添加或修改,通过创建一个包装对象来将原来对象包裹住。
二.适用场景
1) 需要给老的类扩展一些功能或者增加一些附加职责。
2) 特定场景中需要某个对象需要某些功能但在另外的场景中并不需要该对象具有该功能。
3) 当不能采用生成子类的方法进行扩充时:
一种情况:可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。
另一种情况:可能是因为类定义被隐藏,或类定义不能用于生成子类。
三.代码示例
该代码示例是对某手机进行装饰,手机刚出现的时候只有最基本的发短息和打电话的功能,之后出现的智能手机才有了
网上冲浪功能。
1. 手机抽象接口(Phone)
public interface Phone { void baseFunction(); }
2. 第一代手机(OldPhone)
public class OldPhone implements Phone { public void baseFunction() { System.out.println("打电话,发短信"); } }
3.智能手机(newPhone)
public class NewPhone implements Phone { private Phone phone; public NewPhone(Phone phone){ this.phone = phone; } public void baseFunction() { if (phone != null) { phone.baseFunction(); } System.out.println("上网"); } }
4.新建一个手机(MakePhone)
public class MakePhone{ /** * 自己的理解:装饰模式是将拥有同一类特征的对象抽象出来, 在此基础上可以通过装饰类对抽象出来的对象进行附加的处理 * 这样可以在不修改抽象对象的情况下来为抽象对象增加新的功能。 */ public static void main(String[] args) {
Phone phone = new NewPhone(new OldPhone()); phone.baseFunction(); } }
PS: 萌新初来乍到,如有错误还请大佬斧正