• 设计模式之工厂模式


    需求:

      项目需要对银行报文进行解析,而对应的银行有多家,后续可能有更多的银行接入,要求尽可能不要对原有代码的更改。

      很自然的想到工厂模式。

    1.定义顶层解析接口

    2.定义顶层提供者接口

    3.编写不同的解析器

    4.编写不同的解析器工厂类

    5.测试

    1.定义顶层解析接口

    package com.yun.base.design.factory.service;
    
    import java.io.InputStream;
    
    public interface IParser {
        
        /**
         * 解析器解析方法,将输入流解析为可识别的对象 
         * @param in
         * @param target
         */
        void parse(InputStream in,Object target);
        
    }

    2.定义顶层提供者接口

    package com.yun.base.design.factory.service;
    
    
    public interface IProvider {
    
        /**
         * 解析器工厂类,专供生产解析器
         * @return 
         */
        IParser produce();
        
    }

    3.编写不同的解析器

    package com.yun.base.design.factory.service.impl;
    
    import java.io.InputStream;
    
    import com.yun.base.design.factory.service.IParser;
    
    
    public class Dom4jParser implements IParser {
    
        @Override
        public void parse(InputStream in, Object target) {
            System.out.println("Dom4j解析报文");
        }
    
    }
    package com.yun.base.design.factory.service.impl;
    
    import java.io.InputStream;
    
    import com.yun.base.design.factory.service.IParser;
    
    public class SaxParser implements IParser {
    
        @Override
        public void parse(InputStream in, Object target) {
            System.out.println("Sax解析器解析报文");
        }
    
    }

    4.编写不同的解析器工厂类

    package com.yun.base.design.factory.service.impl;
    
    import com.yun.base.design.factory.service.IParser;
    import com.yun.base.design.factory.service.IProvider;
    
    public class Dom4jProvider implements IProvider{
    
        @Override
        public IParser produce() {
            return new Dom4jParser();
        }
    
    }

    5.测试

    @Test
        public void test() {
            IParser dom4jParser = new Dom4jProvider().produce();
            IParser saxParser = new SaxProvider().produce();
            
            dom4jParser.parse(null, null);
            saxParser.parse(null, null);
            
        }

    结果

    Dom4j解析报文
    Sax解析器解析报文

    如果需要增加不同的解析方法,那么只需要实现顶层解析接口,实现工厂类接口,对原有接口及工厂类没有改动。

  • 相关阅读:
    GORM模型(Model)创建
    GORM高级查询
    LogAgent
    安装kafka
    go读取日志tailf
    bubble清单
    go操作kafka
    GORM模型删除
    Vue 父子组件间的传值
    列表和表格
  • 原文地址:https://www.cnblogs.com/yun965861480/p/7216285.html
Copyright © 2020-2023  润新知