我是靠谱客的博主 简单星月,最近开发中收集的这篇文章主要介绍(九)装饰模式&享元模式&外观模式&桥接模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

装饰模式

1、 装饰模式介绍

结构型设计模式之一,使用一种对客户端透明的方式来动态地扩展对象的功能,同时它也是继承关系的一种替代方式,就好像在人的基础上再加上一层衣服的意思,装饰物也许不同,但是装饰的对象本质是不变的。装饰模式定义就是动态给一个对象添加一些额外的职责,就增加功能来说,装饰对象比生成子类要灵活

2、 装饰模式的使用场景

需要透明且动态地拓展类的功能时

3、 Andriod源码中的模式实现

Context和ContextImpl关系(待补充)

4、 装饰模式总结

装饰模式是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案;而代理模式则是给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用,而装饰模式应该为所装饰的对象增强功能

享元模式

1、 享元模式介绍

享元模式是对象池的一种实现,是用来尽可能减少内存使用量,适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象共享,避免创建过多对象的效果;使用共享对象可有效地支持大量的细粒度对象

2、 享元模式的使用场景

(1) 系统中存在大量的相似对象
(2) 细粒度对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对象没有特定省份
(3) 需要缓冲池的场景

3、 享元模式的角色

Flyweight:享元对象抽象基类或者接口
ConcreteFlyweight:具体享元对象
FlyweightFactory:享元工厂,负责管理享元对象池和创建享元对象

4、 享元模式简单实现

以过年回家买车票为例如果创建一个具体火车票类,当售票用户每次查询时没有用某种缓存模式时,就会新生成一个对象,如果用户量过大,可能导致OOM,可以用一个map记录出发地和目的地,这样则避免大量的内存占用及频繁的GC操作,避免了对象的重复创建于回收,java的string池不会重复创建

5、 Andriod源码中的享元模式

在Handler、Looper中,即message和messagequeue中,在message对象中有sPool,sPool是message对象,其实这是一个指针,然后维护这个大小为定值的消息池,其实这也是享元模式的一种表达方式

6、 享元模式总结

享元模式可以大大减少应用程序创建的对象,降低程序内存的占用,增强程序的性能,相对带来的是增加了系统的复杂性,需要分离出外部状态和内部状态

外观模式

1、外观模式介绍

封装api的常用手段,例如网络模块、ImageLoader模块,要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,门面模式,提供一个高层次的接口,使得子系统更易于使用

2、外观模式的使用场景

为一个复杂子系统提供一个简单接口
当你需要构建一个层次结构的子系统时,使用外观模式定义子系统每层的入口点

3、外观模式的简单实现

(1)Facade:系统对外的统一接口,系统内部系统地工作
(2)SystemA、B、C:子系统接口
外观模式就是通过统一的接口对外提供服务,使得外部程序只通过一个类就可以实现系统内部的多种功能
联想到mobilephone可以执行Camera和Phone接口

4、Android源码中的外观模式

Context和ContextImpl(待补充)

5、外观模式总结

核心为封装,通过一个高层次结构为用户提供统一的API入口,使得用户通过一个类型就基本能够操作整个系统
优点:对客户程序隐藏子系统细节,从而减少了客户对于子系统的耦和,使得系统更易于使用
缺点:外观类接口膨胀,外观类没有遵循开闭原则,当业务出现变更时,可能需要直接修改外观类

桥接模式

1、桥接模式介绍

将抽象部分与实现部分分离,使它们都可以独立地进行变化

2、桥接模式的使用场景

如果一个系统需要在构件的抽象化角色和具体角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,可以使它们在抽象层建立一个关联关系

3、桥接模式的组成

Abstraction 保持一个对实现部分对象的引用,抽象部分中的方法需要调用实现部分对象来实现
RefinedAbstraction:优化的抽象部分
Implementor:实现部分

public abstract class Coffee{
	protected CoffeeAdditives impl;

	public Coffee(CoffeeAdditives impl){
			this.impl = impl;
	}
	public abstract void makeCoffee();
}
public class SmallCoffee extends Coffee{
	public SmallCoffee(CoffeeAdditives impl){
			super(impl);
	}
4、Andriod源码中的桥接模式实现

framwork内部实现中Window与WindowManager之间的关系

5、桥接模式总结

对于抽象与实现分离要有把握

最后

以上就是简单星月为你收集整理的(九)装饰模式&享元模式&外观模式&桥接模式的全部内容,希望文章能够帮你解决(九)装饰模式&享元模式&外观模式&桥接模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部