Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android设计模式应用-装饰器模式

Android设计模式应用-装饰器模式

作者头像
wust小吴
发布于 2019-07-08 09:57:21
发布于 2019-07-08 09:57:21
7510
举报
文章被收录于专栏:风吹杨柳风吹杨柳

给一个对象动态的添加方法,就是装饰器模式,通常的做法就是将   原始对象作为一个参数传递给  装饰者构造器

它的目的:是扩展,不是访问

设计模式原则中,就有对扩展开放,对修改关闭

  1. public interface Sourceable {  
  2.     public void method();  
  3. }  
  4. public class Source implements Sourceable {  
  5.     @Override  
  6.     public void method() {  
  7.         System.out.println(“the original method!”);  
  8.     }  
  9. }  
  10. public class Decorator implements Sourceable {  
  11.     private Sourceable source;  
  12.     public Decorator(Sourceable source){  
  13.         super();  
  14.         this.source = source;  
  15.     }  
  16.     @Override  
  17.     public void method() {  
  18.         System.out.println(“before decorator!”);  
  19.         source.method();  
  20.         System.out.println(“after decorator!”);  
  21.     }  

这是网上那个说明设计模式中的关于装饰模式的代码结构,android中的代码又是怎么弄的呢?

 public class ContextWrapper extends Context {

    Context mBase;

    public ContextWrapper(Context base) {

        mBase = base;

    }

    @Override

    public Object getSystemService(String name) {

        return mBase.getSystemService(name);   

    }

//这种形式不知道大家遇到过没有,比如我们适配器构造的时候,是不是也传递了一个context啊,我们似乎还传递了一个数据集对象呢,但是这只能说明是形式上一样,但是真正实现了定义中的功能了吗,对扩展开放,有没有动态的添加一个方法呢,我们还不知道哦,接着看,这里面有一个getSystemService方法,我们去看看他是怎么做的,需要在子类中进行重载

    @Override 

    public Object getSystemService(String name) {

        //下面的代码就是对这个方法的扩展    

        if (LAYOUT_INFLATER_SERVICE.equals(name)) {

            if (mInflater == null) { 

               mInflater = LayoutInflater.from(getBaseContext()).cloneInContext(this);//原型模式的应用

            }

            return mInflater;

        }

        return getBaseContext().getSystemService(name);

    } 

这里面看起来似乎还是有点难懂对吧,还没有java那段代码来的直接,在java代码中在method方法前面和后面加了两句代码,那个过程也是对method方法的一种扩展,这个里面也是在子类中对这个方法进行了扩展,

如果我们从另外一个方面去理解就是,这个方法被我重写了,就是完成扩展了,但是装饰器模式还有个特点就是:原有对象必须是通过构造函数传递进来的参数,如果满足这两点,就算是扩展了,

至于扩展到底做了什么处理,我们并不关心这个。

装饰器模式和  代理模式  其实很相近,都是在一个类中有原有对象的实例,代理模式不需要传参进来,装饰器模式必须要传递参数进来说明是哪个原有对象上进行装饰(扩展功能),代理模式是对原有对象进行访问,装饰器模式是对原有对象的方法进行重载扩展,这个方法可以在当前的装饰器类中重载,也可以在装饰器子类中进行重载,都是允许的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年04月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android设计模式应用-代理模式
其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为 你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。再如我们有的时候打官司,我们需要请律师,因为律师在法律 方面有专长,可以替我们进行操作,表达我们的想法。
wust小吴
2019/07/08
4800
OOAD-设计模式(四)结构型模式之适配器、装饰器、代理模式
前言   前面我们学习了创建型设计模式,其中有5中,个人感觉比较重要的是工厂方法模式、单例模式、原型模式。接下来我将分享的是结构型模式! 一、适配器模式 1.1、适配器模式概述   适配器模式(Adapter)属于结构型设计模式,它的作用如同它的名字一样,用于转换接口。像我们的手机、电脑的电源适配器一样,适配器模式可以使彼此不兼容的代码间优雅地协作。   适配器模式将某个类的接口转换成客户端(用户)期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配
用户1195962
2018/01/18
9180
OOAD-设计模式(四)结构型模式之适配器、装饰器、代理模式
征服Android面试官路漫漫(三):从源码深扒一下四大组件和 Context
Context 是一个抽象类。既然是抽象类,那么它就代表了一类具体对象的通用特征。先来看一下 Context 的类图:
Android技术干货分享
2020/11/03
5600
征服Android面试官路漫漫(三):从源码深扒一下四大组件和 Context
装饰者模式Decorator
装饰者模式,动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更加有弹性的替代方案
见得乐
2022/07/20
6880
装饰者模式Decorator
详解设计模式:装饰器模式
装饰器模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),是 GoF 的 23 种设计模式中的一种结构型设计模式。
栗筝i
2022/12/02
4440
详解设计模式:装饰器模式
常用设计模式全解析
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
技术从心
2019/08/07
5700
【设计模式】装饰器模式
装饰器模式就像俄罗斯套娃,它的核心是在不改变原有类的基础上给类新增功能。对于不改变原有类,可能有的人会想到继承、AOP 切面,虽然这些方式都可以实现,但是使用装饰器模式是另外一种更灵活的思路,能够避免继承导致的子类过多问题,也可以避免AOP带来的复杂性问题。
Li_XiaoJin
2022/06/10
4090
【设计模式】装饰器模式
Java开发中的23种设计模式详解(转)
                                  ——可复用面向对象软件的基础
肖哥哥
2019/02/22
4340
Java开发中的23种设计模式详解(转)
设计模式—— 十七:装饰器模式
● Component(抽象构件) 抽象构件它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法。
三分恶
2020/07/16
1.1K0
设计模式之装饰器模式
本文由老王将建好的书房计划请小王来帮忙,小王却想谋权篡位,老王通过教育他引出装饰器设计模式,第二部分针对老王提出的建设性意见实现装饰器模式,第三部分针对装饰器模式在Jdk中的IO、Spring中的缓存管理器、Mybatis的运用来加强我们的理解,第四部分说明装饰器模式和代理模式的区别及他们各自的应用场景。
程序员田同学
2022/08/10
2690
23种设计模式
一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式
xiangzhihong
2018/02/01
1.5K0
23种设计模式
3年工作必备 装饰器模式
今天我给大家分享设计模式中的装饰器模式。用贴切的生活故事,以及真实项目场景来讲设计模式,最后用一句话来总结这个设计模式。
田维常
2021/06/09
3750
3年工作必备  装饰器模式
「聊设计模式」之装饰器模式(Decorator)
🏆本文收录于《聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎持续关注&&收藏&&订阅!
bug菌
2023/11/06
4261
「聊设计模式」之装饰器模式(Decorator)
【Java设计模式】014-装饰器模式
装饰器(Decorator)模式:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。
訾博ZiBo
2025/01/06
1290
Java 设计模式(五)《装饰器模式》
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
星尘的一个朋友
2020/11/25
5230
Android 设计模式之装饰模式
AntDream
2024/06/13
1370
Android 设计模式之装饰模式
Java设计模式之(七)——装饰器模式
装饰器模式(Decorator Pattern):动态的给一个对象添加额外的职责,就增加功能来说, 装饰模式相比生成子类更为灵活。
IT可乐
2021/11/25
3820
设计模式之装饰器模式
装饰器模式(Decorator Pattern)是一种结构型设计模式,它可以在不改变现有对象的结构的情况下,动态地给对象增加一些额外的功能。装饰器模式通过创建一个包装对象(即装饰器)来包裹真实对象,并在保持真实对象的接口不变的前提下,为其提供额外的功能。装饰器模式可以在运行时根据需要选择不同的装饰器来组合和修改对象的行为。
wayn
2023/09/12
2750
设计模式之装饰器模式
Android Context完全解析,你所不知道的Context的各种细节
用户1158055
2018/01/08
1.7K0
Android Context完全解析,你所不知道的Context的各种细节
前端的设计模式系列-装饰器模式
代码也写了几年了,设计模式处于看了忘,忘了看的状态,最近对设计模式有了点感觉,索性就再学习总结下吧。
windliang
2022/08/20
3530
前端的设计模式系列-装饰器模式
相关推荐
Android设计模式应用-代理模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档