设计模式-1 简单工厂设计模式
简单工厂不是一个标准的设计模式,但是他太常用,有简单,所以这是第一个热身运动
接口回顾
-
Java接口的概念:
java接口是一种特殊的抽象类,跟一般抽象类相比,接口里面的所有方法都是抽象方法,接口里面的所有方法都是抽象,所以属性都是常量.也就是说,接口只有方法定义而没有实现;
-
用处
定义实现类的外观,约束实现类的行为.接口相当于一份契约,根据外包应用需要的功能,约定实现类应该要实现的功能.
-
接口的思想
浓缩下来:“封装隔离”:对被隔离体行为的封装,或者对被隔离体职责的封装;而隔离指的是外部调用和内部实现,外部调用只能通过接口进行调用,外包调用是不知道内部具体实现的,也就是说外包调用和内部实现是被接口隔离开的
-
使用接口的好处
外包调用和内部实现被接口隔离,那么只有接口不变,内部实现的变化就不会影响到外部应用,从而使得系统更灵活,扩展性和可危害性;”接口是系统可插拔性的保证”
接口和抽象的选择
1.优先选择接口 2.既要定义子类的行为又要为子类提供公共的功能时选择抽象类
-
面向接口编程是Java编程的重要原则
通常,java程序分为:表现层,逻辑层,数据层,他们之间都有通过接口来通讯
每一个层里面,又有许多小模块,每个模块对外则是一个整体,所以一个模块对外应该提供接口,其他地方需要使用到这个模块的功能时,可以通过此接口来进行调用.”接口是被其隔离部分的外观”
那么”组件”是什么东西?
组件就是能完成一个功能的封装体.
Api api = new Imple()
在以上代码的时候,在客户端,既有接口,又有实现类,与思想”封装隔离”不符合?
那么我们如何做得只只接口不知实现呢?
解决方案:简单工厂
简单工厂能帮助我们真正地开始面向接口编程,像以前的做法,其实只是用到接口的多态部分的功能,而最重要的”封装隔离性”并有没体现出来
疑问:把”new Impl()”放到客户端和放到简单工厂里面有什么不同?
简单工厂的位置是位于封装体内的,也就是简单工厂是根接口和具体的实现在一起的,算是封装体内部的一个类,所以简单工厂知道具体的实现类是没有关系额.重新整理一下简单工厂的结构图
简单工厂的写法:
1.传人type:
由于从客户端调用工厂的时候传人参数,就说明客户端必须hide每个参数的含义,也需要理解每个参数对应的功能处理,这就要求必须在一定程度上向客户暴露一定的内部实现细节
2.使用配置文件和反射技术
简单工厂的本质是:选择实现