简单工厂

《Design Pattern》 这个系列算是阅读《研磨设计模式》的读书笔记。


“面向接口编程”

接口中所有方法都是抽象方法,所有成员变量都是常量,只有方法定义而没有方法实现。

接口规定了实现类的外观

接口的思想,“封装隔离”,对方法调用和方法实现进行了隔离,方法实现的改变不会影响方法的调用,提高了灵活性,可扩展和维护性,“接口是系统可插拔的保证”

接口和抽象类的选择:优先使用接口。当既要定义子类行为,又要为子类提供公共的功能时,选择抽象类。

java程序习惯上分很多层(表现层,逻辑层,数据层),每层里又有很多模块,层与层之间,模块之间通过接口通信。

接口是被隔离部分的外观。


组件:能完成一定功能的封装体。小到一个类,大到一个系统,都可以成为组件。

从设计的角度看,系统,子系统,组件,模块说的是一回事,都是能完成一定功能的封装体,只是功能多少不同而已。


简单工厂:

定义:提供创建对象实例的功能,不关心具体实现(具体实现由其他类来完成),提供的对象实例类型可以是接口,抽象类,具体类。(即客户端不知道这个对象实例是如何被创建出来的,创建的方法被封装在了一个类或方法中)。


简单工厂体现了“面向接口编程”,client通过Factory获得接口类型的实例,Factory将这个实例是如何创建的封装了起来,client是不知道的,提高了灵活性。在java基础知识中,将具体类的实例对象赋值给接口类型变量,只是使用了接口多态的特性。

静态工厂:简单工厂中的方法都写成静态的,就是静态工厂了。为了避免不必要的简单工厂类实例,可以把其构造方法写成私有的。

可配置的简单工厂:1)客户端传参,缺点是向客户端暴漏部分信息,2)搞一个配置文件,简单工厂读取配置文件,运用反射创建对应实例。3)读取程序运行过程中的某个内存值

简单工厂的本质:选择实现。实现client和Impl之间的解耦。

运用场景:1)隔离封装具体实现 。2)要对创建的对象进行集中管理和控制


代码示例

public class Simple_Factory {
	public static void main(String[] args) {
		
		Api api1 = Factory.getApi(1);
		Api api2 = Factory.getApi(2);
		api1.work(); //ImplApi1 is working
		api2.work(); //ImplApi2 is working
	}
}

class Factory{
	private Factory(){};
	
	public static Api getApi(int type){ //带参数的静态工厂
		Api api = null;
		
		if(1 == type){
			return new ImplApi1();
		}else if(2 == type){
			return new ImplApi2();
		}
		
		return api;
	}
}

interface Api{
	void work();
}

class ImplApi1 implements Api{

	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.println("ImplApi1 is working");
	}
	
}
class ImplApi2 implements Api{
	
	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.println("ImplApi2 is working");
	}
	
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值