Java设计模式之------工厂模式

工厂模式


场景和问题:

Java开发讲究的是面向接口编程,需要通过一个工厂类隐藏具体的实现类

先创建接口(接口在设计之初就要定好,开发过程中不允许随意改动接口):

工厂类的命名规范:***Factory
单例工厂方法的命名规范:getInstance()


工厂的本质是“选择实现”

工厂、接口和实现类之间的技术边界:工厂只负责选择实现,实现类才做真正的实现,而接口是限定到底实现什么东西和返回什么东西,三者之间分工明确、各负其责。


代码演示

接口:DepApi

[java]  view plain  copy
  1. package cn.hncu.pattern.factory.dep;  
  2.   
  3. public interface DepApi {  
  4.    public String t1();  
  5. }  

实现类1:DepImpl1

[java]  view plain  copy
  1. package cn.hncu.pattern.factory.dep;  
  2.   
  3. public class DepImpl1 implements DepApi {  
  4.     @Override  
  5.     public String t1() {  
  6.         System.out.println("Api impl1....");  
  7.         return "1111111";  
  8.     }  
  9.       
  10.     //这个方法在外面访问不到,因为被接口隔离了  
  11.     public String t2() {  
  12.         System.out.println("DepApi impl2..t2..");  
  13.         return "t2222";  
  14.     }  
  15. }  
实现类2:
[java]  view plain  copy
  1. package cn.hncu.pattern.factory.dep;  
  2.   
  3. public class DepImpl2 implements DepApi {  
  4.   
  5.     @Override  
  6.     public String t1() {  
  7.         System.out.println("DepApi impl2....");  
  8.         return "2222";  
  9.     }  
  10.       
  11.     public String t2() {  
  12.         System.out.println("DepApi impl2..t2..");  
  13.         return "t2222";  
  14.     }  
  15.   
  16. }  

工厂类:DepFactory

[java]  view plain  copy
  1. package cn.hncu.pattern.factory.dep;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.io.FileNotFoundException;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.util.Properties;  
  8.   
  9. //工厂真正的作用是:选择实现  
  10. public class DepFactory {  
  11.     // 工厂方法,命名规范:createDepApi,geDepApi,getDepInstance  
  12.     public static DepApi getDepApi() {  
  13.         // return new DepImpl2();  
  14.           
  15.         Properties p = new Properties();  
  16.         int type=0;  
  17.         try {  
  18.             InputStream in = new FileInputStream("a.properties");  
  19.             p.load(in);  
  20.             String strType = p.getProperty("type");  
  21.             type = Integer.parseInt(strType);  
  22.         } catch (IOException e) {  
  23.             e.printStackTrace();  
  24.         }  
  25.           
  26.         if(type==1){  
  27.             return new DepImpl1();  
  28.         }  
  29.         if(type==2){  
  30.             return new DepImpl2();  
  31.         }  
  32.         return null;  
  33.     }  
  34. }  
测试:Client
[java]  view plain  copy
  1. package cn.hncu.pattern.factory;  
  2.   
  3. import cn.hncu.pattern.factory.dep.DepApi;  
  4. import cn.hncu.pattern.factory.dep.DepFactory;  
  5.   
  6. public class Client {  
  7.     public static void main(String[] args) {  
  8.          DepApi api = DepFactory.getDepApi();  
  9.          System.out.println(api.t1());  
  10. //       api.t2(); //实现类当中的t2()方法已经被接口封装隔离了,访问不了  
  11.     }  
  12. }  




你可能感兴趣的:(java,java设计模式,设计,工厂模式)