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

    需求:

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

      很自然的想到工厂模式。

    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解析器解析报文

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

  • 相关阅读:
    [转发]深入理解git,从研究git目录开始
    iOS系统网络抓包方法
    charles抓包工具
    iOS多线程中performSelector: 和dispatch_time的不同
    IOS Core Animation Advanced Techniques的学习笔记(五)
    IOS Core Animation Advanced Techniques的学习笔记(四)
    IOS Core Animation Advanced Techniques的学习笔记(三)
    IOS Core Animation Advanced Techniques的学习笔记(二)
    IOS Core Animation Advanced Techniques的学习笔记(一)
    VirtualBox复制CentOS后提示Device eth0 does not seem to be present的解决方法
  • 原文地址:https://www.cnblogs.com/yun965861480/p/7216285.html
Copyright © 2011-2022 走看看