设计模式-工厂模式
来源:互联网 发布:端口2482 编辑:程序博客网 时间:2024/06/11 23:08
1.工厂模式的概念:通过工厂模式来代替new方法创建对象,包括工厂方法模式和抽象工厂模式,抽象工厂模式是工厂方法模式的扩展
2.工厂模式的目的:定义一个接口来创建对象,但是让子类来决定那些对象需要被实例化,工厂模式把实例化的工作推迟到子类中去实现
3.工厂模式的应用场景:
1.有一组类似的对象需要创建,比如生产毛巾的工厂一般不会生产笔记本
2.在编码时不能预知那些类是需要实例化的,比如去逛超市,我们提前没有计算要买什么,而是进入超时之后再做选择
3.需要考虑系统的扩展性,不应依赖于产品实例如何被创建,组合和表达的细节
4.代码实现:
1.接口:
public interface CarInterface {
void CreatCar();
}
2.实现类:
public class BenT implements CarInterface {
@Override
public void CreatCar() {
System.out.println("创建了一辆本田");
}
}public class FuT implements CarInterface {
@Override
public void CreatCar() {
System.out.println("创建了一辆福特");
}
}
3.工厂:
public class Factory {
public CarInterface getCreat(String className) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
CarInterface carInterface = (CarInterface) Class.forName(className).newInstance();
return carInterface;
}
}
5.spring中的BeanFactory举例:
1.BeanFactory作为Spring基础的IOC容器,是S平ring的一个Bean工厂
2.如果单从工厂模式考虑,BeanFactory就是用来生产Bean,然后提供给客户端
6.Spring中Bean的实例化过程:
1.通过类默认的构造器或者指定的构造器来实例化Bean(暂成为instanse1)
2.如果Bean的配置文件中配置了Bean的属性值,则在instance1的基础上进行属性注入,这种注入是覆盖性的,得到instance2
3.如果Bean实现了InitializableBean接口,则调用afterPropertiesSet()方法来操作instance2,得到instance3
4.如果Bean的配置文件中配置了init-method="init",则会调用指定的初始化方法,则在instance3的基础上调用指定的初始化方法,得到instance4,当然,这个初始化的名字是任意的
7.工厂方法模式和抽象工厂模式的区别:
1.工厂模式是一种极端的抽象工厂模式,而抽象工厂模式可以看作是工厂模式的扩展
2.工厂模式是用来创建一个产品的等级架构,而抽象工厂模式则是用来i创建多个产品的等级架构
3.工厂模式只有一个抽象产品类,而抽象工厂模式则有多个抽象工厂类
8.工厂模式的优点:
1.系统可以在不修改工厂角色的情况下引进新的产品
2.客户端不必关心对象的创建,明确了职责
3.更好的理解面向对象原则,面向接口编程
9.工厂模式的价值:
1. 有利有弊
优点:将对象的创建统一起来便于维护和整体把控,对扩展开放,对修改封闭
缺点:耦合性提高,由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中,这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利。
2.使用有限制
从工厂模式的示例可以看出:工厂模式需要类实现它的接口并且在业务内部存在明显的继承关系,比如汽车和奔驰宝马的关系。而继承关系往往存在于模型之间,业务之间很难存在继承关系,因此如果业务内部或者业务之间没有这种显式的继承关系该咋办?就算业务内部有继承关系,各个业务交给你统一管理,这样就会提高代码的耦合性,当创建逻辑复杂的时候,工厂方法就很复杂,容易产生干扰。
3.其开闭性优点很容易被替代
可以通过高度层次化和模块化来提高系统的开闭性,而不必生硬地去套用工厂模式。
- 设计模式------工厂模式
- 设计模式------工厂模式
- 设计模式 [ 工厂模式 ]
- 设计模式--工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式 工厂模式
- 设计模式-工厂模式
- 设计模式 -- 工厂模式
- 设计模式-工厂模式
- 设计模式----工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式 - 工厂模式
- php实现协程,真正的异步
- 第十一周训练总结(二)
- Android_GPS详解
- Note of deep JVM(2)_hotspot JVM
- 错排。中的阶乘要注意不能超过20,不然longlong也救不了
- 设计模式-工厂模式
- 6.14
- 映客小视频怎么导出?映客小视频下载到本地的方法
- ButterKnife在RecyclerView adapter中的使用
- myeclipse基本的快捷键
- Github博客搭建
- JAVA反射机制
- 数据库视频总结(一)
- 以太网协议-传输介质