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

工厂模式


场景和问题:

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

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

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


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

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


代码演示

接口:DepApi

package cn.hncu.pattern.factory.dep;

public interface DepApi {
   public String t1();
}

实现类1:DepImpl1

package cn.hncu.pattern.factory.dep;

public class DepImpl1 implements DepApi {
	@Override
	public String t1() {
		System.out.println("Api impl1....");
		return "1111111";
	}
	
	//这个方法在外面访问不到,因为被接口隔离了
	public String t2() {
		System.out.println("DepApi impl2..t2..");
		return "t2222";
	}
}
实现类2:
package cn.hncu.pattern.factory.dep;

public class DepImpl2 implements DepApi {

	@Override
	public String t1() {
		System.out.println("DepApi impl2....");
		return "2222";
	}
	
	public String t2() {
		System.out.println("DepApi impl2..t2..");
		return "t2222";
	}

}

工厂类:DepFactory

package cn.hncu.pattern.factory.dep;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

//工厂真正的作用是:选择实现
public class DepFactory {
	// 工厂方法,命名规范:createDepApi,geDepApi,getDepInstance
	public static DepApi getDepApi() {
		// return new DepImpl2();
		
		Properties p = new Properties();
		int type=0;
		try {
			InputStream in = new FileInputStream("a.properties");
			p.load(in);
			String strType = p.getProperty("type");
			type = Integer.parseInt(strType);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		if(type==1){
			return new DepImpl1();
		}
        if(type==2){
			return new DepImpl2();
		}
		return null;
	}
}
测试:Client
package cn.hncu.pattern.factory;

import cn.hncu.pattern.factory.dep.DepApi;
import cn.hncu.pattern.factory.dep.DepFactory;

public class Client {
	public static void main(String[] args) {
         DepApi api = DepFactory.getDepApi();
         System.out.println(api.t1());
//       api.t2(); //实现类当中的t2()方法已经被接口封装隔离了,访问不了
	}
}


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