Android 开发设计模式

工厂方法设计模式:将产品的一些特性规范化成接口,让不同的产品对象能够遵守这一规范,然后再通过不同的参数创建不同的产品对象。优点是我们无需关心生产的产品具体是什么对象,不同产品之间没有耦合性,缺点是随着产品种类的提升类也会随之变多,每次新增产品种类都需要修改生产产品对象的方法。

抽象工厂设计模式:这种设计模式的出现是为了解决工厂方法的一个弊端,就是每次新增种类都需要修改生产产品的方法,在抽象工厂中,生产对象已经不是由方法来做,而是将生产线抽象化成接口,让不同的产品种类有不同的生产线。这种设计模式虽然解决了工厂方法的一个弊端(修改方法),同时也加重了工厂方法的另一个弊端(类变多)。


工厂设计模式(工厂方法/抽象工厂)和策略设计模式有什么区别

这两种设计模式虽然十分相似,但是最大的不同在于,工厂设计模式需要关心产品如何生产,而策略设计模式不需要。因为工厂设计模式面向的是产品,而策略设计模式面向的是配置。


责任链设计模式:继承让类与类之间有了关系,而责任链设计模式就是让不同方法之间有了关系,更准确的说相互建立了责任关系。比如 View 的事件分发机制,我们知道 View 事件分发有三种:分发、拦截、消费,当事件被停止分发时,ViewGroup 会将事件交给自己处理(拦截 ——> 消费),否则就交给子 View 继续分发,如果没有子 View 了就会交给自己处理(消费)。


策略模式:通过定义统一的规范,让继承者或者实现者能够完成不同的需求,优点是能够统一管理需求,从而减少代码的修改,缺点是类会随着需求变多而变多。例如 RecyclerView 分割线定义就是采用了这种设计模式,我们可以通过继承 ItemDecoration 类来完成对 RecyclerView 分割线的定制化。

代理设计模式:通过实现原对象提供的接口规范,然后对原对象的接口方法进行调用,从而管控这个对象的访问。这设计模式还分为两种,一种是静态代理,另一种是动态代理。静态代理比较简单,通过实现接口进行对象代理,缺点是随着代理的对象越多类也会随之变多,而动态代理恰恰解决了这一问题,通过 Proxy(委托人或者代理人)类,可以实现对接口调用的动态监听。

装饰设计模式:在不破坏继承关系的前提下对原有对象进行扩展。例如 ListView 的 addHeader 和 addFooter 就是采用了这种设计模式,通过对 BaseAdapter 的再次实现,将原适配器对象和添加头尾功能进行封装。最终再通过 ListView.setAdapter 将原适配器对象替换掉,这样就能在不用改变原有适配器对象的前提下对适配器的功能进行扩展。

代理设计模式和装饰设计模式有什么区别

这两种的方式实现的方式基本雷同,但是本质的思想不一样,代理设计模式是为了限制外界对对象的访问,而装饰设计模式是为了对象的功能更进一步扩展。


模板设计模式:将对象的一些共同属性和方法封装到一个抽象类中,子类也可以通过重写来改变原有的逻辑,这种设计模式的最明显的特点是能够提升代码的复用性。例如 BaseActivity、BaseFragment 等就是将一些常用的属性和方法抽取出来,供子类调用或者重写。

享元设计模式:对一些频繁创建回收的对象进行内存管理,避免这种情况下导致的内存抖动。这种设计模式最明显的特点是复用对象。例如 Handler 源码中使用 Message 的对象都是通过 Message.obtain (静态方法)来获得,它会优先从对象池中复用没有正在使用的 Message 对象,而当 Message 对象使用完毕之后 MessageQueue (消息队列)会调用 Message.recycle (对象方法)方法将其回收到对象池中。

模板设计模式和享元设计模式有什么区别

这两种设计模式最大的共同点就是复用,只不过模板设计模式针对的是代码的复用,而享元设计模式针对的是对象的复用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342