设计模式3#工厂

工厂

场景和问题Java程序开发讲究面向接口编程,隐藏具体的实现类,可是如何得到接口呢?

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

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

铁三角:1接口:封装实现类中的方法

       2实现类:真正的实现代码

       3工厂类:选择实现

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

下面是一个在工厂类中通过配置文件(配置文件可以去看前面的博客点击打开链接)来选择实现类的程序:

Client类(main类):

package cn.hncu.pattern.Factory;

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

/**
 * @author 军街
 *客户界面
 */
public class Client {
	public static void main(String[] args) {
		DepApi api=DepFactory.getInstance();//利用工厂类返回一个接口DepApi的具体实现类
		api.t1();//调用接口里的方法,功能在实现类中实现。
	}

}

接口Api类:

package cn.hncu.pattern.Factory.dep;

public interface DepApi {//DepApi接口,封装实现类中的方法。只可以使用接口中的抽象方法。
	public abstract String t1();//具体功能在实现类中。
}

实现类DepImp1:

package cn.hncu.pattern.Factory.dep;

public class DepImp1 implements DepApi{//接口DepApi的实现类

	@Override
	public String t1() {//实现接口的具体功能。
		System.out.println("我是DepApi的实现类哦QWQ");
		return "OK";
	}
	
}
实现类DepImp2:

package cn.hncu.pattern.Factory.dep;

public class DepImp2 implements DepApi{

	@Override
	public String t1() {
		System.out.println("我也是接口DepApi的实现类,但是我是第2个版本的");
		return "OK";
	}
	
}

工厂类DepFactory:

package cn.hncu.pattern.Factory.dep;

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

public class DepFactory {
	public static DepApi getInstance(){//工厂方法,返回一个实现DepApi的实现类
		Properties p=new Properties();
		int n = 0;
		try {
			FileInputStream inStream=new FileInputStream("a.properties");
			p.load(inStream);
			String strType= p.getProperty("type");
			n=Integer.parseInt(strType);
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if(n==1){
			return new DepImp1();
		}else if(n==2){
			return new DepImp2();
		}else{
			return null;
		}
		
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值