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

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

  • 相关阅读:
    51nod 1463 找朋友 (扫描线+线段树)
    51nod 1295 XOR key (可持久化Trie树)
    51nod 1494 选举拉票 (线段树+扫描线)
    51Nod 1199 Money out of Thin Air (树链剖分+线段树)
    51Nod 1287 加农炮 (线段树)
    51Nod 1175 区间中第K大的数 (可持久化线段树+离散)
    Codeforces Round #426 (Div. 1) B The Bakery (线段树+dp)
    前端基础了解
    git 教程
    HIVE 默认分隔符 以及linux系统中特殊字符的输入和查看方式
  • 原文地址:https://www.cnblogs.com/yun965861480/p/7216285.html
Copyright © 2011-2022 走看看