美文网首页
Java 设计模式学习--装饰器模型

Java 设计模式学习--装饰器模型

作者: superHang | 来源:发表于2020-04-13 16:35 被阅读0次

其实无论是代理模式还是装饰模式,本质上就是对原有对象增强的方式~
对象增强方式有下面几种方式

  • 继 承

  • 继承父类,子类扩展

  • 装饰器模式

  • 使用“包装”的方式来增强对象

  • 代理模式

装饰器模式

就是动态拓展原有类的功能,加强原有类的功能,就比如手机,把手机当成一个类,原有的手机只能打电话,现在增强这个类的功能,可以看美女直播,玩游戏,买东西。。。就是增强了这个类的功能

设计狗的接口,以一只狗 狗蛋为例子

public interface Dog {
    void eat();
}

实现狗的接口,很久很久以前有一只狗叫做狗蛋,就会吃吃吃 和找隔壁的花花。。这两种技能

public class WhildDog implements Dog {

    @Override
    public void eat() {
        System.out.println("原来的狗蛋就会天天吃吃吃吃吃。。。。");
    }

    @Override
    public void findWomenDo() {
        System.out.println("原来的狗蛋就会天天吃吃吃吃吃,吃完找隔离的小母狗花花。。。然后 羞羞羞羞");
    }
}

抽象类--装饰器

//抽象类  装饰器 实现接口
public abstract class DecorateDog implements Dog {

    private Dog dog;
    //构造函数 实现狗的接口
    public DecorateDog(Dog dog){
        this.dog=dog;
    }

    //实现狗吃东西接口
    @Override
    public void eat(){
        dog.eat();
    }

    @Override
    public void findWomenDo(){
        dog.findWomenDo();
    }
}

开始给狗蛋加技能了,先是看门的技能,继承装饰器的抽象类,然后添加看门技能的方法,吃完东西学会看门了狗蛋

//继承装饰器的抽象类
public class GuardHouse extends  DecorateDog {

    public GuardHouse(Dog dog) {
        super(dog);
    }

    //拓展功能
    public void biteBadPerson(){
        System.out.println("后来的狗蛋学会了看门....");
    }

    @Override
    public void eat(){
       //调用父类的方法
       super.eat();
       //看门
       biteBadPerson();
    }

给狗蛋添加接飞碟的技能了,吃完东西,看门了,酒足饭饱之后玩飞碟啊,然后再去找花花 嘿嘿嘿

public class TaoHaoMaster extends DecorateDog {
    public TaoHaoMaster(Dog dog) {
        super(dog);
    }

    public void play(){
        System.out.println("吃完饭的狗蛋学会了玩飞碟,吸引隔离的花花");
    }

    @Override
    public void findWomenDo(){
        play();
        super.findWomenDo();
    }
}

执行看看,狗蛋一天的生活,new GuardHouse(dog) 新增了看门技能,new TaoHaoMaster(dog) 新增了接飞碟的技能,这两种技能对狗蛋进行了装饰,让狗蛋更加高大上了

    public static void main(String [] args){
            Dog dog=new WhildDog();
            dog=new GuardHouse(dog);
            dog=new TaoHaoMaster(dog);
            dog.eat();
            dog.findWomenDo();
image.png

其实下面这样简写就行,跟你经常玩的IO流系不系很像,啊哈IO就是用的装饰器模式嘛

        Dog dog=new TaoHaoMaster(new GuardHouse(new WhildDog()));
        dog.eat();
        dog.findWomenDo();

//上面这玩意跟玩IO流的时候是不是很像
 InputStream inputStream=
new BufferedInputStream(new FileInputStream(new File("C://狗蛋.jpg")));

参考了
https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247484226&idx=1&sn=a354d872978fc5db79a012c27ab5277f&chksm=ebd74243dca0cb5515fcad1ecfeda6a329be38c30a82a1325a5a19e7f62b0fa3c74069eed24d&scene=21#wechat_redirect

相关文章

  • Java 设计模式学习--装饰器模型

    其实无论是代理模式还是装饰模式,本质上就是对原有对象增强的方式~对象增强方式有下面几种方式 继 承 继承父类,子类...

  • 装饰者模式——IO流运用

    推荐博客Java设计模式学习09Java设计模式学习09Java设计模式学习09 装饰者模式还是比较难懂的。。。。...

  • Java设计模式之装饰器模式

    Java设计模式之装饰器模式 本文仅是个人观点,如有错误请指正 简介 装饰器模式(Decorator Patter...

  • Java设计模式系列-装饰器模式

    原创文章,转载请标注出处:《Java设计模式系列-装饰器模式》 一、概述 装饰器模式作用是针对目标方法进行增强,提...

  • 9、结构型模式-装饰器设计模式

    1、如虎添翼的设计模式-装饰器设计模式 简介:讲解-装饰器设计模式介绍和应用场景 装饰器设计模式(Decorato...

  • Java设计模式——装饰器模式

    Java设计模式之装饰器模式 回顾 上一次分享的组合模式相信大家已经理解其中的精髓,那么这次跟大家聊聊装饰器模式。...

  • Java设计模式<装饰器模式>

    Java设计模式<装饰器模式> 意图 态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为...

  • Java设计模式-装饰器模式

    Java程序员们应该对java.io对不会陌生,因为java.io包采用了装饰器模式。 一、定义: Decorat...

  • Java设计模式--装饰器模式

    该模式又称为包装模式,允许向一个现有的对象添加新的功能,同时又不改变其结构,就像一种装饰一样,动态的将功能附加到别...

  • Java设计模式-装饰器模式

    在上篇适配器模式中提到在Java io中InputStreamReader更多是扮演是一个装饰器角色,给Strea...

网友评论

      本文标题:Java 设计模式学习--装饰器模型

      本文链接:https://www.haomeiwen.com/subject/kzngmhtx.html