抽象思维实现各种不同的接口调用

              依然还是那个调用运营商接口的问题,当时给了我两种接口,一个是全国所有的,一个是江西电信的,就是那个用了wsdl形式的接口。用了两天的时间解决了它,后来全国通用的接口就好多了,但是接口源源不断的来。而且每种接口的参数不同,如果因为一种接口不同就去改数据库的话,那样成本太大。所以我选用了配置文件的形式。最终达到的效果就是,再来一个接口,配置文件中添加一个节点,添加一个实现类……

              写一个xml的配置文件很容易,但是在原有的配置文件有两种,一种是*.properties,一种是*.xml。所以首先还是弄清楚这两者的区别。

 

 *.properties*.xml的区别


              properties配置文件,风格是一个属性对应于一个值(key=value)这样的键值匹对模式。properties适合小型配置的操作。xml是标准的数据传输和存储格式,不仅方便查看,而且便于操作,适合于大型配置的操作,用xml更为灵活一些

 

              如果是网络需要将配置文件网络传输,或者转化为对象等等复杂的操作,或者格式规则比较严格,则使用xml,写个dtd这样就不会出错。如果只是简单的项目中的配置properties就可以满足了

 

              相对于我的需求,显然是xml形式的比较合适,so果断选择xml配置文件,其实当时是直接选的,在这里小矫情一下。

 

 

读取配置文件xml


              选好了xml之后,怎样读取是实现它的下一步。

我的xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<business_search>
	<!--search配置-->
	<interface_group id="quanguointerface">
		    <!--全国通用  移动、联通、电信-->
		    <quanguoyd>
		        <parser>com.demo.controller.business.interfacedistribute.WholeCountryReader</parser>
		        <url>url</url>
		        <apitype>方法名</apitype>
		        <apiid>保密</apiid>
		        <apisecret>保密</apisecret>
		        <productno>保密</productno>
		        <othername>YD</othername>
		    </quanguoyd>
		
		    <!--江西电信-->
		    <jiangxi id="jiangxi14">
		        <parser>com.demo.controller.business.interfacedistribute.JiangXiDianXinReader</parser>
		        <url>地址</url>
		        <methodname>recharge</methodname>
		        <account>保密</account>
		        <pwd>保密</pwd>
		    </jiangxi>
	
	              <!--还有很多接口-->
	</interface_group>
</business_search>

配置文件的读取类:

   /**
     * 通过运营商接口名称查询配置文件的接口配置信息
     * author:xiaoguai
     * 2015年12月3日15:06:08
     * @param businessinterfacename 运营商接口名称
     */
    public String simpleDocumentXmlRead(String businessinterfacename,String phoneNumber,String flowValue,String businessCode){

	        _BusinessParser parser=null;
	
	        String result="";
	        DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
	        try{
	            DocumentBuilder db=dbf.newDocumentBuilder();
	            //读取到运营商接口配置文件xml
	            org.w3c.dom.Document doc=db.parse("././././././src/main/resources/businessinterface-config.xml");
	          
	            //根据接口名称获取到接口配置
	            NodeList businessList=doc.getElementsByTagName(businessinterfacename);
	
	            if (businessList.getLength()>0){
		                Node business=businessList.item(0);
		
		                org.w3c.dom.Element itemlink=(org.w3c.dom.Element)business.getChildNodes().item(1);
		                String parserName=itemlink.getNodeName();
		                String parserValue=itemlink.getFirstChild().getNodeValue();
		                System.out.println(parserName+":"+parserValue);
		
		                //通过parserValue去实例化一个类
		                Class parserClass=Class.forName(parserValue);
		                parser =(_BusinessParser) parserClass.newInstance();
		               result= parser.parse(businessinterfacename,phoneNumber,flowValue);
		
		                System.out.println("--------"+"now time is : "+new Date());
	            }
	
	        }catch (Exception e){
	            e.printStackTrace();
	        }
	        return result;
    }


所有接口的父类

public interface _BusinessParser {
    public String keyword=null;

    public String parse(String businessinterfacename,String phoneNumber,String flowValue) throws ParserConfigurationException, IOException, SAXException;
}


              然后,各个接口对应的实现类分别实现接口的parse方法即可。

 

 

              这样,以后再来一个接口,我只需在配置文件中添加一个节点,然后去写一个实现类就好。其实这样做的目的还有一个,就是每次调完接口还要进行一些插入、更新的操作,这样看似实现了抽象的思想,但是其实每种接口最后可能返回的json参数是不同的,类型也不同。对于回调还是个问题,所以,觉得自己只是实现了一半的抽象。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
抱歉,我是一个语言模型 AI,无法给您画图。但我可以为您解释多态和抽象类。 多态:多态是面向对象编程中的一个重要概念,是指同一个方法可以根据对象的不同而具有不同的表现形式。在 Java 中,多态可以通过继承、接口实现和方法重写来实现抽象类:抽象类是一种不能被实例化的类,它的主要作用是为了被继承。抽象类可以包含抽象方法和非抽象方法,抽象方法必须被子类实现,非抽象方法可以被子类继承或重写。 下面是一个简单的示例代码,演示了多态和抽象类的使用: ```java abstract class Shape { public abstract void draw(); } class Circle extends Shape { public void draw() { System.out.println("画一个圆形"); } } class Rectangle extends Shape { public void draw() { System.out.println("画一个矩形"); } } public class Main { public static void main(String[] args) { Shape s1 = new Circle(); Shape s2 = new Rectangle(); s1.draw(); s2.draw(); } } ``` 输出结果为: ``` 画一个圆形 画一个矩形 ``` 在这个示例中,Shape 是一个抽象类,它包含一个抽象方法 draw()。Circle 和 Rectangle 都是 Shape 的子类,它们都实现了 draw() 方法。在 main() 方法中,我们分别创建了一个 Circle 和一个 Rectangle 对象,并将它们赋值给 Shape 类型的 s1 和 s2 变量。由于多态的特性,s1 和 s2 可以调用 draw() 方法,它们具有不同的表现形式。最终输出结果为画一个圆形和画一个矩形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值