设计模式-简单工厂和抽象工厂

    工厂模式是一种设计模式,属于一种编码的模板,代码结构的构造思路。

    为什么要我们需要用到工厂模式呢,这得从类的构造函数说起。

    类实例化过程中,我们需要使用 new 关键字来创建类的实例对象,同时调用该类的构造方法(构造方法和构造函数只是同一事物的不同称谓,指的是同一事物)。

    我们知道构造函数的作用是初始化赋值,可是,一旦当我们的编程水平上升后,写的代码变得复杂后,构造函数里要写的代码也越来越长。比如查询数据库或是更多的操作。

    倘若将全部的这些统统放进构造函数的代码块中,不免显得结构臃肿,于是就引出了工厂。

    工厂模式的实现步骤以下:

    1、创建接口;

    2、创建(任意个需要的)接口实现类重写父类接口的方法;

    3、创建工厂类:

        定义一个公开的、以父类接口作为返回值的带参方法,方法体内是对用户传入的参数做出处理,也就是条件判断,返回哪个具体的实现类;

    4、在main方法中创建工厂类的实例对象,在需要用到哪个具体实现类对象,只需声明父类接口的类型,以工厂类对象点出工厂类 的带参方法,即可替代原来的new关键字,能够完成复杂的对象初始化工作。


    抽象工厂相比于简单工厂,区别在于创建对象的复杂程度上如果我们创建对象的方法变得复杂了,或者说需要用到多个接口了。

    我们就需要将原先的工厂类,变成抽象类。将共同部分封装在抽象类中,不同部分通过子类实现。

    实现步骤以下:

    1、仍是创建接口,不过现在需要创建的接口变成了复数个。

    2、分别创建不同接口各自的实现类;

    3、创建抽象工厂类,定义抽象的、以父接口作为返回值的获取具体实现类的带参方法;

    4、创建抽象工厂类的子类,父接口有几个,就创建几个子类。重写的方法体里,依然是对传入的参数进行判断,返回指定的实现类对象;

    5、创建一个公有的、静态的、以抽象工厂类为返回值的工厂生成器类,它的作用依然是根据用户传入的参数判断返回抽象工厂子类的具体哪个实现类的实例对象。

    6、之后在main方法体里,就可以声明抽象父类工厂类类型,通过生成器类类名直接点出获取方法,传入参数以确定具体要创建哪个工厂子类的对象。再声明父类接口为类型,向下转型为实现接口的实体类。

    抽象工厂的优缺点也是明显的:

    它能保证用户在客户端只能使用一个产品对象,对用户屏蔽具体的产品实现,只需关注自己需要的接口。

    缺点是当需要增添一个新系列的产品时,需要增加、实现的类的数量会成倍增加,在一定程度上增加了系统的复杂程度,同时增强系统里具体类的相互依赖。

猜你喜欢

转载自blog.csdn.net/weixin_42412444/article/details/80943410