zoukankan      html  css  js  c++  java
  • 简单工厂模式


    简单工厂的本质是:选择实现(用户不需要知道具体的实现类的信息,只需要调用接口使用即可。


    代码目录:


    Api.java:

    package a;
    
    public interface Api {
       public void test1(String s);
    }

    Client.java:

    package a;
    
    public class Client {
       public static void main(String[] args){
    	   Api api=Factory.createApi();
    	   api.test1("ggggg");
       }
    }


    Impl.java:

    package a;
    
    public class Impl implements Api{
    	public void test1(String s){
    		System.out.println("impl1 is "+s);
    	}
    
    }


    Factory.java:()

    package a;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    //工厂类,用来创建Api对象
    public class Factory {
    	
       public static Api createApi(){
    	   //直接读取配置文件来获取需要创建实例的类
    	   Properties p=new Properties();
    	   InputStream in =null;
    	   try{
    		   in=Factory.class.getResourceAsStream("FactoryTest.properties");
    		   p.load(in);
    	   }catch (IOException e){
    		   System.out.println("error");
    		   e.printStackTrace();
    	   }finally{
    		   try{
    			   in.close();
    			   
    		   }catch (IOException e){
    			   e.printStackTrace();
    		   }
    	   }
    	   //用反射去创建
    	   Api api=null;
    	   try{
    		   api=(Api)Class.forName(p.getProperty("ImplClass")).newInstance();
    	   }catch (InstantiationException e){
    		   e.printStackTrace();
    	   }catch (IllegalAccessException e){
    		   e.printStackTrace();
    	   }catch(ClassNotFoundException e){
    		   e.printStackTrace();
    	   }
    	    return api;
       }
    }
    


    FactoryTest.properties: (配置文件,添加新类的时候,只需要更改配置文件即可,其他程序都不需要改动。)

    ImplClass=a.Impl


    运行结果:

    impl1 is ggggg


  • 相关阅读:
    @NotNull @NotBlank @NotEmpty
    springboot @valid与@validated的参数校验使用总结
    一张表多个外键指向同一主键
    关于List的remove()方法
    双数据源切换问题
    前端通过jqplot绘制折线图
    关于js与jquery中的文档加载
    Mybatis中typeAliases的使用
    项目中常见数据库知识
    html中实现倒计时功能(setInterval,clearInterval)
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3174500.html
Copyright © 2011-2022 走看看