当前位置: 代码迷 >> 综合 >> Design Patterns - Facade
  详细解决方案

Design Patterns - Facade

热度:77   发布时间:2023-10-21 05:04:41.0

Facade(外观) — 对象结构型模式

为子系统中的一组接口提供一个一致的界面,Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

适用场景

  1. 当你需要为一个复杂子系统提供一个简单接口时。
  2. 客户程序与抽象类的实现部分之间存在着很大的依赖性。引入 Facade 将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。

UML 图

Design Patterns - Facade

效果

  1. 对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。
  2. 它实现了子系统与客户之间的松耦合关系。

实现


class SegmentTreeFacade(object):def __init__(self):self.st = SegmentTree(10000)def update(self, idx, val):self.st.update(idx, val, 1, 10000, 1)def query(self, l, r):return self.st.query(l, r, 1, 10000, 1)class SegmentTree(object):def __init__(self, length):my_length = length * 4sum = []for i in range(0, my_length):sum.append(0)self.sum = sumdef update(self, L, val, l, r, rt):if l==r:self.sum[rt] = valreturnm = l + r >> 1if L <= m:self.update(L, val, l, m, rt<<1)else:self.update(L, val, m+1, r,rt<<1|1)self.sum[rt] = self.sum[rt<<1] + self.sum[rt<<1|1]def query(self, L, R, l, r, rt):if L<=l and r<=R:return self.sum[rt]m = l + r >> 1res = 0if L <= m:res += self.query(L,R,l,m,rt<<1)if R>m:res += self.query(L, R, m+1, r, rt<<1|1)return res

client

if __name__ == "__main__":client = SegmentTreeFacade()client.update(1, 1)client.update(2, 4)client.update(5, 45)print(client.query(1, 5))print(client.query(2, 4))""" output: 50 4 """
  相关解决方案