结构型模式2

门面模式


目的:定义一组高层接口让子系统更易用。

举例: A,提供了 a、b、c、d 四个接口。系统 B 完成某个业务功能,需要调用 A 系统的 a、b、d 接口。利用门面模式,我们提供一个包裹 a、b、d 接口调用的门面接口 x,给系统 B 直接使用。

应用:

易用,符合接口隔离和迪米特法则。

性能好,如果调用者要走网络,把三个接口一次性调用完,显然性能更高

解决事务问题,要么都成功,要么都失败。

ps:

接口:太大会导致接口不可复用,太小会导致接口不易用。

可以把门面接口和底层接口放在一起,最好是重新开一层。

 

组合模式


目的:把对象组织成树形,可以对集合和元素做统一处理,非常方便。

关键字:树形。

举例: 目录和文件;部门和员工。

基类 class a

元素类 class ele:a

集合类 class set:a

{

     list<a> m_set;

     void add(a );

     void do();

}

client 主要对set操作

{

set x

x.do()

}

享元模式


共享的单元的简称

目的,节省内存

前提,享元对象是不可改变对象。

原理,如果这些重复的对象是不可变对象,在内存中只保留一份实例,供多处代码引用(缓存进工厂)

举例

     1.下棋的游戏房间;每个棋盘的中的棋子的 id 颜色 名称 可以做为 享元类;只需要改坐标,所以享元类+坐标 = 棋子类

       所以,10000个棋盘,可以共享这些棋子,节省不少内存。

    2.文本编辑器,享元类(字体,颜色,格式)+ 字类型 = 字类

ps:

 有点类似 单例的变体   : 多例;但是享元模式是为了对象复用,节省内存,而多例模式是为了限制对象的个数。

  享元的缓存,是为了复用;其他缓存,为了复用。

 享元的复用,是共享;对象池的复用,是需要先释放,在使用

比如字符串常量,就是共享单元。

写时拷贝,类似共享单元。

缺点:

       如果,共享单元被用到频率很低,或者用了马上就释放,那么反而会浪费内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值