抽象工厂模式100例(设计模式之抽象工厂模式)
抽象工厂模式100例(设计模式之抽象工厂模式)缺点就是新增加一种对象族的时候,需要在抽象工厂中扩展,那么抽象工厂自上而下的继承关系,导致子类都需要修改客户端拿到一种数据库连接信息时,可以通过工厂生成器通过抽象工厂获取到该数据库类型对应的抽象工厂,再通过抽象工厂创建当前数据库实例,实现数据库的各种操作抽象工厂,扩展性上又一次提升,增加了族的概念,多个相关或者有相互依赖的对象称之为族,比如,电脑内部的各个零件分别比做各个对象,那么这些零件就属于电脑族,抽象工厂根据族对业务最大限度进行抽象,比如数据库设计初期最好是将对象族考虑全面为创建一组相关或相互依赖的对象提供一个接口,而不需要指定具体类抽象工厂弥补了工厂方法中一个工厂只能创建一种业务类,对多个工厂再进行抽象,业务类工厂的创建由抽象工厂完成,抽象工厂有个核心的概念,对象族,举个例子,数据库类型有多种,在众多的数据库类型中从存储类型又分为关系型数据库和nosql数据库,这里可以理解为2个对
工厂模式小结简单工厂,对象的创建由客户端向工厂传入参数,工厂通过参数判断使用什么类型的对象并实例化,如if-else,但是新增一种对象类型,需要修改工厂,不符合开闭原则
举个例子,简单工厂比做一个创业初期小作坊级别的蛋糕房,蛋糕房有蛋糕机、面包机,来了一个客户,第一天要一个蛋糕,蛋糕房做了一个蛋糕,第二天要一个面包,蛋糕房去做了一个面包,第三天客户要一包饼干,蛋糕房没有饼干机,怎么办,只能去买个饼干机,才能给到客户,明白了吧,首先客户要的糕点都是工厂给出来的,第二,如果工厂没有用户要的糕点,工厂需要新增一个机器才能满足客户需求,小作坊有什么风险呢?时间久了小作坊里面机器越来越多,肯定会杂乱无章,如果有一天蛋糕房老板添加新设备的时候线路没搞好起火了,蛋糕房就完蛋了。。。创业失败!
工厂方法,相对于简单工厂模式,将对象的创建延迟到了子类,使用哪个类型,客户端就显示的指定使用哪个工厂,相互不影响,当新增一个类型时,不需要修改基类,只需要扩展一个类型的工厂即可,但是类型过多的时候,需要工厂也需要很多
举个例子,蛋糕房老板吸取教训,重整旗鼓,为了规避风险,每个产品分别做了一个工厂,客户由于比较喜欢这家的口味,又来了,这个客户也是一个吃货,每天变着法吃,老板也是对自己的想法非常执着,大肆扩张厂房,终于被吃货“吃”垮了。。。创业失败!
抽象工厂,扩展性上又一次提升,增加了族的概念,多个相关或者有相互依赖的对象称之为族,比如,电脑内部的各个零件分别比做各个对象,那么这些零件就属于电脑族,抽象工厂根据族对业务最大限度进行抽象,比如数据库设计初期最好是将对象族考虑全面
定义为创建一组相关或相互依赖的对象提供一个接口,而不需要指定具体类
特点抽象工厂弥补了工厂方法中一个工厂只能创建一种业务类,对多个工厂再进行抽象,业务类工厂的创建由抽象工厂完成,抽象工厂有个核心的概念,对象族,举个例子,数据库类型有多种,在众多的数据库类型中从存储类型又分为关系型数据库和nosql数据库,这里可以理解为2个对象族,那么每个对象族又包含了多种数据库
客户端拿到一种数据库连接信息时,可以通过工厂生成器通过抽象工厂获取到该数据库类型对应的抽象工厂,再通过抽象工厂创建当前数据库实例,实现数据库的各种操作
缺点就是新增加一种对象族的时候,需要在抽象工厂中扩展,那么抽象工厂自上而下的继承关系,导致子类都需要修改
代码示例今天比较晚了,引用hutool获取数据源连接池的抽象工厂类看一下
创建数据源抽象工厂
根据数据源类型返回具体工厂
由工厂返回数据源连接池