zoukankan      html  css  js  c++  java
  • 工厂+策略设计模式

    有时后经常需要写很多的if判断语句,导致了代码的十分冗余,可读性不高,下面以工厂设计模式+策略设计模式提供一种可替代的写法,简化代码

    工厂类:Factory

    /**
     * 工厂设计模式
     */
    public class Factory {
        private static Map<String, Handler> strategyMap = Maps.newHashMap();
    
        public static Handler getInvokeStrategy(String name) {
            return strategyMap.get(name);
        }
    
        public static void register(String name, Handler handler) {
            if (StringUtils.isEmpty(name) || null == handler) {
                return;
            }
            strategyMap.put(name, handler);
        }
    }

     策略接口:

    import org.springframework.beans.factory.InitializingBean;
    
    /**
     * 策略设计模式
     */
    public interface Handler extends InitializingBean {
    
        public void AAA(String name);
    
    }
    具体实现的一些策略 KangBaHandler
    @Component
    public class KangBaHandler implements Handler {
    
        @Override
        public void AAA(String name) {
            // 业务逻辑A
            System.out.println("亢八完成任务");
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            Factory.register("亢八", this);
        }
    }
    具体实现的一些策略 LiSiHandler
    import org.springframework.stereotype.Component;
    
    @Component
    public class LiSiHandler implements Handler {
    
        @Override
        public void AAA(String name) {
            // 业务逻辑A
            System.out.println("李四完成任务");
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            Factory.register("李四", this);
        }
    }
    具体实现的一些策略 TianQiHandler
    import org.springframework.stereotype.Component;
    
    @Component
    public class TianQiHandler implements Handler {
    
        @Override
        public void AAA(String name) {
            // 业务逻辑A
            System.out.println("田七完成任务");
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            Factory.register("田七", this);
        }
    }
    具体实现的一些策略 WangWuHandler
    import org.springframework.stereotype.Component;
    
    @Component
    public class WangWuHandler implements Handler {
    
        @Override
        public void AAA(String name) {
            // 业务逻辑A
            System.out.println("王五完成任务");
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            Factory.register("王五", this);
        }
    }
    具体实现的一些策略 ZhangSanHandler
    import org.springframework.stereotype.Component;
    
    @Component
    public class ZhangSanHandler implements Handler {
    
        @Override
        public void AAA(String name) {
            // 业务逻辑A
            System.out.println("张三完成任务");
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            Factory.register("张三", this);
        }
    }


























  • 相关阅读:
    经典网页设计:漂亮的个人作品集网站设计欣赏【中篇】
    引领网页设计潮流的优秀网页作品赏析《第二季》
    Chance – 功能强大的 JavaScript 随机数生成类库
    设计前沿:16款扁平风格 iOS 7 图标设计
    TwentyTwenty – 使用 jQuery 实现图片对比功能
    未来的 Web:九个不可思议的 WebGL 应用试验
    推荐25个帮助你提高技能的 CSS3 实战教程
    经典网页设计:顶尖的个人作品集网站设计欣赏【上篇】
    Smint – 用于单页网站制作的 jQuery 导航菜单插件
    关注经典:CSS Awards 获奖网站作品赏析《第一季》
  • 原文地址:https://www.cnblogs.com/cb1186512739/p/14264616.html
Copyright © 2011-2022 走看看