• 标记接口模式【其他模式】


    标记接口模式

    public class Marker {
        /**
         * 标记模式:
         * Using empty interfaces as markers to distinguish special treated objects。
         * 使用空的标记接口来区分需要特殊处理的对象。
         */
        @SuppressWarnings("boxing")
        @Test
        public void all() {
            final PermissionServiceImpl serviceImpl = new PermissionServiceImpl();
            final Map<Permission, Boolean> map = serviceImpl.getPermission("zxd");
            Assert.assertTrue(map.get(ReadPermission.ALL));
        }
    }
    
    interface Permission {
    }
    
    enum ReadPermission implements Permission {
        SELF, ALL;
    }
    
    enum WritePermission implements Permission {
        SELF;
    }
    
    interface PermissionService {
        /**
         * 高内聚,将所有的权限操作都封装在一处
         */
        Map<Permission, Boolean> getPermission(String userId);
    }
    
    class PermissionServiceImpl implements PermissionService {
    
        @Override
        public Map<Permission, Boolean> getPermission(String userId) {
            final Map<Permission, Boolean> map = Maps.newHashMap();
            if ("zxd".equals(userId)) {
                map.put(ReadPermission.ALL, Boolean.TRUE);
            }
    
            map.put(ReadPermission.SELF, Boolean.TRUE);
            map.put(WritePermission.SELF, Boolean.TRUE);
            return map;
        }
    }
    
  • 相关阅读:
    LeetCode347 前k个高频元素
    剑指42 连续字数租的最大和
    hdu1540
    hdu4553 两棵线段树
    cdq分治
    负环
    最短路
    差分约束系统
    hdu3308
    hdu5862 树状数组+扫描线+离散化
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10211105.html
Copyright © 2020-2023  润新知