二进制在权限系统中的应用
基于二进制的权限管理与验证
1. 权限值的设定
用二进制来表示权限值应该是按位来设置,每个位占一个,表示一种权限,如:
基于二进制的权限管理与验证
1. 权限值的设定
用二进制来表示权限值应该是按位来设置,每个位占一个,表示一种权限,如:
Visitor
思想:表 示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
场景:其 实你不用去理解上面这句话。该模式其实又是一个在代码的物理结构上和Bridge模式很相似的模 式。但是,其语义,其目的,在逻辑上又是不同的。如果说Bridge,以及上述我称为可视为Bridge扩 展的模式中,作为参数的Bridge类,是作为调用类的被访问对象的话,Visitor, 在大多数情形下,如其英文含义,它在语义上是完全相反的。不是他被调用的类处理,更大程度上它处于主动状态,是它去访问,去处理调用它的类。调用它的类, 把自己对别人隐藏起来的东西,暴露给Visitor品尝,任君蹂躏(这个,这个~~千 万别想歪了;-))。另一方面,即使逻辑上没有这种Visitor主 动去访问调用类的语义,只要Visitor类中的操作,是依赖于调用类的具体实现类(它本身或他某 个层次的子类)的某些状态或者方法的,那么,就可以应用该模式来分离出这样的可重用的操作。
思想:当 有一个语言需要解释执行, 并且你可将该语言中的句子表示为一个抽象语法树时,定义一个解释器,这 个解释器使用该表示来解释语言中的句子。
场景:其 实,从物理结构上,该模式的代码架构看起来可能和Composite模式一模一样,致使其针对的逻 辑语义不同。Composite模式描述一种一般的整体和部分使用接口上的一致性,而Interpreter模 式则侧重于语言解释器的实现构架。
实现:如 上图,基本同Composite模式。
Mediator
思想:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
Command
思想:将一个动态的执行过程封装成一个对象,可以像处理数据来处理和管理这样的对象,在需要的时候激发该对象的方法就能执行被封装的执行过 程。
场景:该模式在很多时候非常有用,它使得我们对逻辑上已经激发的行为进行优化成为可能,我们不仅可以根据需要改变一组逻辑上以经济法的活动的 顺序,消冗余操作,撤销不必要的操作等。也可以把活动和操作视为资源一样来管理和重用。同时该模式也是许多事务处理机制的基础。
Chain of Responsibility
思想:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一 个对象处理它为止。
场景:该模式实际上是对人们常会不自觉地去做的一种代码组织方式的总结而已。有的时候一条消息需要被处理,我们当然可以在一个雷的一个方法中 对他进行所有需要的处理。但是,如果要做的处理很复杂的情形,甚至能够按照一定的逻辑醒来分类所有这些处理,则不要在一个雷一个函数里处以一切会更好,我 们可以定义多个处理类类表示逻辑上的不同的处理,然后一个个处理类的传递这个消息对象,让希望处理该消息的类自己决定是不是要处理。这样,就能将一个难以 维护的复杂处理过程,分解为一系列简单明了,易于维护的类了。
Observer
思想:定 义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所 有依赖于它的对象都得到通知并被自动更新。
场景:上面描述该模式思想的文字可能显得有些拗口,实际上你也不用想得过于复杂。只要你写过任何的基于图形界面的程序,那么实际上您对他是一 点也不该陌生的。它就是我们每一次鼠标键盘敲击都在我们的程序内部流转着的事件机制的基础。当一个事件发生,则通知订阅该事件的对象。
Memento备忘录设计模式是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到以前保存的状态。Memento备忘录设计模式的结构如下:
思想:定 义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Te m p l a t e M e t h o d 使 得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
场景:该 模式实际上是一种非常直观和可理解的OO思想下的代码重用的实现。只需一次性实现一个算法的不变的 部分,并将可变的行为留给子类来实现。各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。模板方法只允许在特定点计算法的某个阶段被 过载,这样也就只允许在这些点进行扩展。
思想:说Flyweight可 能有的朋友第一次看到想象不到是什么样子,其实说他就是一个Pool,你可能就明白了。也就是由一 个Flyweight Factory来管理一族一定数目逻辑上经常需要构建和销毁的细颗粒对象, 例如我们常见的数据库连接池。在Factory内部,并不物理销毁这些对象,而在接到实例化请求时 返回这些被关系对象的实例,从而减少创建销毁这些细颗粒对象的开销。
场景:基 本上所有的需要Pool这个概念的环境都能应用。
实现:实现的底层方式可以千变万化,在接口上就是如上图所示,花样不多。这里就不多解释。