设计模式
文章平均质量分 73
richest_qi
这个作者很懒,什么都没留下…
展开
-
RBAC权限模型
权限权限,是用户可以访问的资源。包括页面权限、操作权限和数据权限。页面权限。页面权限,即用户登录系统可以看到的页面。由菜单控制。菜单包括一级菜单、二级菜单,只有用户有一级菜单、二级菜单的权限,那么用户就可以访问页面。操作权限。操作权限,即页面的功能按钮,包括查看、新增、修改和删除等。比如,用户点击删除按钮时,后台会校验用户角色下的所有权限是否包含该删除权限,如果包含,则可进行下一步操作,反之,提示无权操作。数据权限。数据权限,即不同用户在同一页面看到的数据是不同的。比如,财务部只能看到财务部原创 2022-04-27 22:10:40 · 16185 阅读 · 1 评论 -
设计模式之动态代理
ProxyProxy提供了创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理的超类。接口InvocationHandler每个代理实例都有一个关联的调用处理程序对象,比如,本例的MyInvocationHandler就是调用处理程序,该处理程序实现了接口InvocationHandler。new newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)通过调用Proxy原创 2021-07-19 19:56:51 · 115 阅读 · 0 评论 -
设计模式之静态代理
静态代理包含4种角色,分别是,抽象角色,使用接口或抽象类实现真实角色代理角色,用来代理真实角色,代理真实角色后一般会做一些附加操作客户,使用代理角色进行一些操作静态代理的好处在于:1)真实角色的业务变得更加纯粹,不再需要关注一些公共业务;2)公共业务交给代理,实现了业务分工;3)公共业务需要扩展时,只需要在代理角色中作处理,更方便。当然,静态代理的缺点也很明显,比如需要多写类,增加了代码量。示例1com.jepcc.demo.Rent(抽象角色)package com.jepc原创 2021-07-16 15:53:23 · 108 阅读 · 0 评论 -
单例模式
const Singleton = function(){ let instance; function init(){ let word = "have a nice day"; let getWord = () => word; return { getWord } } return { getInstance:function(){ if原创 2020-09-01 18:04:21 · 200 阅读 · 0 评论 -
初识模块方法模式
看看怎么“泡咖啡”和“泡茶”。//泡咖啡class Coffee{ prepareRecipe(){ this.boilWater(); this.brewCoffeeGrinds(); this.pourInCup(); this.addLemon(); } boilWater(){ console.log("boil water"); } brewCoffeeGrinds(){原创 2020-05-13 17:36:31 · 207 阅读 · 0 评论 -
初识策略模式
从一个例子开始吧。function Duck(type){ this.type = type;}Duck.prototype.swim = function(){ console.log("I'm swimming");}Duck.prototype.display = function(){ var type = this.type; if(type === "mallard"){ console.log("I'm a mallard duck")原创 2020-05-13 14:20:53 · 185 阅读 · 0 评论 -
订阅者发布者模式的简单实现
以下是订阅者发布者模式的一个简单实现。const PubSub = (function(){ const topics = {}; let id = 0; function subscribe(topic,fn){ topics[topic] = topics[topic] || []; if(typeof fn !==...原创 2020-05-04 11:13:51 · 278 阅读 · 0 评论