享元模式(Flyweight)
@@@模式定义:
运用共享技术有效地支持大量细粒度的对象。
@@@练习示例:
给系统加入权限控制
@@@示例代码:
[不使用模式的实现]
\usual\AuthorizationModel.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package user;import pattern.SecurityMgr;public class ClientPattern {public static void main(String[] args) {// 需要先登录,然后再判断是否有权限 SecurityMgr mgr = SecurityMgr.getInstance(); mgr.login("张三"); mgr.login("李四"); boolean f1 = mgr.hasPermit("张三", "薪资数据", "查看"); boolean f2 = mgr.hasPermit("李四", "薪资数据", "查看"); System.out.println("f1==" + f1); System.out.println("f2==" + f2); for (int i = 0; i < 3; i++) { mgr.login("张三" + i); mgr.hasPermit("张三" + i, "薪资数据", "查看"); }}}
fm==pattern.AuthorizationFlyweight@c2ea3f
fm==pattern.AuthorizationFlyweight@c2ea3f
fm==pattern.AuthorizationFlyweight@a0dcd9
f1==false
f2==true
fm==pattern.AuthorizationFlyweight@c2ea3f
fm==pattern.AuthorizationFlyweight@c2ea3f
fm==pattern.AuthorizationFlyweight@c2ea3f
@@@模式的实现:
享元模式设计的重点就在于分离变与不变。
把一个对象的状态分为不可变的内部状态和可变的外部状态。
然后通过共享不变的部分,达到减少对象数量并节约内存的目的。
@@@模式的优点:
减少对象数量,节省内存空间。
@@@模式的缺点:
维护共享对象,需要额外内存。
@@@模式的本质:
分离与共享。
@@@模式体现的设计原则:
NA