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

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

  • 相关阅读:
    Linux 忘记root密码
    Linux 基础命令
    Linux 运行级别
    Oracle 体系结构
    Oracle 数据库启动过程
    数据库设计范式
    Oracle通过ROWID删除表中重复记录
    JACASCRIPT--的奇技技巧的44招
    css 的小细节,小总结
    关于我们DOM的知识点
  • 原文地址:https://www.cnblogs.com/yun965861480/p/7216285.html
Copyright © 2011-2022 走看看