简单工厂模式概述
工厂方法的功能
1.根据应用环境和其他的因素,在层次类中选择一个类
2.创建所选择类的对象
3.返回给调用者所创建的对象(该对象的类型应该是层次类的超类类型即父类)
工厂方法的优点
1.使客户程序清晰:应用对象可以使用工厂方法访问合适类的对象,应用对象就不需要处理类的选择标准问题。
2.隐藏了创建对象的细节:因为不同的子类的对象需要以不同的方式创建,工厂方法将根据环境、客户选择而把创建对象的繁琐细节封装了起来。
3.可以不需要知道哪个具体类的对象被创建了:因为工厂方法返回给客户类的对象的类型为层次类的超类类型,所以客户类不需要知道哪个具体的子类的对象被创建了。
模式中的组件
Creator(工厂类):
1.简单工厂方法模式的核心
2.包含应用所需要的业务逻辑
3.工厂方法创建一个product类型的对象
Product组件:
1.JAVA接口或者抽象类
2.具体子类的共同接口
ConcreateProduct组件:
1.具体的JAVA类,实现其接口Product或者继承了Product
注释:parameter(参数)
例1:汽车保险条款
利用简单工厂方法模式进行设计,用于查询不同类型的汽车保险条款。
注释:
1.根据String Option参数的不同值,然后选择不同的保险
2.PolicyProducer属于工厂类
注释:JAVA接口和抽象类之间的区别并不大在此处
注释
1.把police定义为Autolnsurance类型,而不是具体的类型,Autolnsurance为所有保险的父类,police此变量将来可以被所有的子类替换,而且所有的程序不受影响。
2.方法必须是static静态类型。并且String opt即根据参数,创建对象。
3.返回值一定是抽象类型,即Autolnsurance类型。
注释
1.SHOW代表单击了Show Inof按钮
2.得到了下拉列表框的值后,调用简单工厂中的方法,返回想要的对象,以后调用getInsuranceDescription方法,用来显示具体保险的内容,将获得的信息放到文本框中。
3.通过类名调用类里面的方法,说明getPolicyObj是一个Static方法,而不需要在获取对象之间把工厂创建一次,再调用方法。
简单工厂方法模式的优点
1.一些业务逻辑被放到了工厂类里面,工厂类包含了创建对象所需要的逻辑(创建时间和如何创建)。
2.客户类免除了创建对象的责任,客户类不必亲自创建Autolnsurance子类的对象;该责任交给了工厂方法。客户类仅仅是消费者。
3.符合单一职责选择(即一个类只负责一个单一变化点),简单工厂方法模式实现了单一职业原则。
4.可扩展性,由于Client类不负责创建保险品种子类对象,所以,如果需要增加一个新的保险品种,而暂时没有打算利用该新保险品种,则不必修改原有代码;而需要使用新的保险品种类型时,只需要在工厂类中增加一个新的方法。
简单工厂方法模式的缺点
1.在产品层次类,增加一个具体的产品子类比较困难。
工厂类必须知道每个产品子类。必须知道怎样创建新增的产品子类的对象。然后提供给客户类
所以在产品层次类中,增加一个具体的产品类(要求系统使用比子类),则需要修改工厂类的源代码,违背了单一职责原则(或开闭原则)。
2.因为工厂类使用静态方法,所以工厂类中的方法不能被继承。即简单工厂类是一个单独的类。无法形成层次结构。
总结:对消费者,只需要知道如何使用。对生产者(工厂),需要知道如何创建。
来源:CSDN
作者:CodeMan&
链接:https://blog.csdn.net/m0_46381401/article/details/104919195