JAVA设计模式之装饰设计模式

装饰设计模式: 就是对想要的类功能进行加强…

例如: FileWriterBufferedWriter
BufferedWriter就是用的装饰模式对FileWriter的功能进行增强. 效率的增强.

不仅如此…装饰设计模式还有解耦的作用

装饰和继承都能实现一样的特点: 进行功能的扩展增强

但是继承耦合性会大…并且后面很能解耦


装饰设计模式例子:
人在以前只有饭吃…

public class Demo {
    public static void main(String[] args) {
        Person p = new Person();
        p.chifan();
    }
}

class Person {
    void chifan() {
        System.out.println("吃饭");
    }
}

运行结果:
在这里插入图片描述
现在生活好了…能吃的东西也变多了…

我们可以对吃饭这个功能利用装设设计模式进行加强

public class Demo {
    public static void main(String[] args) {

        Person p = new Person();
        //p.chifan();
        NewPerson np = new NewPerson(p);

        np.chifan();


    }
}
class Person {
    void chifan() {
        System.out.println("吃饭");
    }
}
class NewPerson {
    private Person p;
    NewPerson(Person p) {
        this.p = p;
    }

    void chifan() {
        System.out.println("开胃酒");
        p.chifan();
        System.out.println("甜点");
    }
}

运行结果:
在这里插入图片描述


如果用继承话…

public class Demo {
    public static void main(String[] args) {
        NewPerson p = new NewPerson();
        p.chifan();
    }
}

class Person {
    void chifan() {
        System.out.println("吃饭");
    }
}

class NewPerson extends Person{
    void chifan() {
        System.out.println("开胃酒");
        super.chifan();
        System.out.println("甜点");
    }
}

运行结果也是和刚刚用装饰设计模式一样的
在这里插入图片描述


假设我们用操作文件的例子(类什么的都是虚构的)

Writer
    |-- TextWriter: 用于操作文本
        |--BufferTextWriter: 加入了缓冲技术的操作文本的对象
    |-- MediaWriter: 用于操作媒体
        |--BufferMediaWriter: 加入了缓冲技术的操作媒体的对象

到这里就已经可以了. 但是这样做好像并不理想.
我们发现只为提高功能. 进行继承. 导致继承体系越来越臃肿. 不够灵活
这一种是让缓冲和具体的对象相结合.


我们将缓冲进行单独的封装, 那个对象需要缓冲就将那个对象和缓冲关联
就想FileWriterBufferedWriter一样

所以装饰比继承灵活.

特点: 装饰类和被装饰类都必须所属同一个接口或者父类

发布了87 篇原创文章 · 获赞 43 · 访问量 4000

猜你喜欢

转载自blog.csdn.net/weixin_42947972/article/details/103429068