1.装饰器模式
- 一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。
优点: - 灵活性:装饰器模式将功能切分成一个个独立的装饰器,在运行期可以根据需要动态的添加功能,甚至对添加的新功能进行自由的组合;
- 扩展性:当有新功能要添加的时候,只需要添加新的装饰器实现类,然后通过组合方式添加这个新装饰器,无需修改已有代码,符合开闭原则;
与代理模式的区别: - 装饰器模式偏重对原对象功能的扩展,扩展后的对象仍是是对象本身;然而代理模式偏重因自己无法完成或无需关心,需要他人干涉事件流程,更多的是对对象的控制。
IO 中输入流和输出流的设计:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(“c://a.txt”)));
2.创建接口Girl
package org.example.decorator;
public interface Girl {
public void fair();
public void clothes();
}
3.创建实现类LadyGaga
package org.example.decorator;
public class LadyGaga implements Girl{
@Override
public void fair() {
System.out.println("白色的头发。。。");
}
@Override
public void clothes() {
System.out.println("牛肉护体。。。");
}
}
4.创建装饰器类LovelyGirl
package org.example.decorator;
public class LovelyGirl implements Girl{
Girl girl;
public LovelyGirl(Girl girl) {
this.girl = girl;
}
@Override
public void fair() {
System.out.println("红色的头发。。。");
girl.fair();
}
@Override
public void clothes() {
System.out.println("蕾丝裙。。。");
girl.clothes();
}
}
5.创建装饰器类SexGirl
package org.example.decorator;
public class SexGirl implements Girl{
Girl girl;
public SexGirl(Girl girl) {
this.girl = girl;
}
@Override
public void fair() {
System.out.println("黄色的头发。。。");
girl.fair();
}
@Override
public void clothes() {
System.out.println("迷你短裙。。。");
girl.clothes();
}
}
6.创建装饰器类PureGirl
package org.example.decorator;
public class PureGirl implements Girl{
Girl girl;
public PureGirl(Girl girl) {
this.girl = girl;
}
@Override
public void fair() {
System.out.println("紫色的头发。。。");
girl.fair();
}
@Override
public void clothes() {
System.out.println("连衣裙。。。");
girl.clothes();
}
}
7.创建测试类
package org.example.decorator;
public class Test {
public static void main(String[] args) {
Girl girl = new LovelyGirl(new SexGirl(new PureGirl(new LadyGaga())));
girl.fair();
girl.clothes();
}
}