
在阅读了许多关于工厂模式的解释之后,我决定编写一些代码,并结合描述来描述各种设计模式的实现:
首先,引物
十年前,出现了一个暴发户. 他家中有三辆车-奔驰,宝马,奥迪和奥迪. 他还雇了司机为他开车. 但是,暴发户上车时总是很奇怪: 上车后,他们说“驾驶一辆奔驰!”,上车后,他们说,“驾驶一辆宝马!”您必须说: 这个人病了!只是说你不会开车? !!
当我们将此暴发户的行为纳入程序设计时,我们会发现这是普遍现象. 幸运的是,可以用OO(面向对象)语言避免这种疾病. 下面介绍基于Java语言的文章主题: 工厂模式.
第二,分类
工厂模式主要是为了提供创建对象的过渡界面,以隔离创建对象的具体过程,达到提高灵活性的目的.
工厂模式在Java和模式中分为三类:
1)简单工厂模式
2)工厂方法模式
3)抽象工厂模式
这三种模式是从上到下抽象的,并且更为通用.
GOF在“设计模式”一书中将工厂模式分为两类: 工厂方法和AbstractFactory. 可以将简单工厂模式视为工厂方法模式的特例,并且两者属于一类.
都可以使用. 在本文中,使用了“ Java和模式”的分类方法. 让我们看看这些工厂模型如何“治愈”.
三个简单的工厂模式
简单工厂模式也称为静态工厂方法模式. 从重命名可以看出,该模式必须非常简单. 它存在的目的很简单: 定义用于创建对象的接口.
让我们看一下它的组成:
1)工厂角色: 这是此模型的核心,并且包含某些业务逻辑和判断逻辑. 在Java中,通常是通过具体的类实现的.
2)抽象产品角色: 通常是由特定产品实现的父类或接口. 它由Java中的接口或抽象类实现.
3)特定产品角色: factory类创建的对象是该角色的一个实例. 它由Java中的一个具体类实现.
那么如何使用简单的工厂模式?我们将使用简单的工厂模型来改变新贵驾驶汽车的方式-现在,新贵只需要坐在车里对驾驶员说“开车”即可.
代码: //抽象产品角色
公共界面Car {
公共无效驱动器();
}
//特定产品角色
公共级别的Benz实施Car {

公共无效驱动器(){
System.out.println(“ Driving Benz”);
}
}
Bmw公共类实现了Car {
公共无效驱动器(){
System.out.println(“驾驶宝马”);
}
}
. . . (我不会写有关奥迪的文章: P)
//工厂角色
公共类驱动程序{
//工厂方法. 请注意,返回类型是抽象产品角色.
公共静态Car driverCar(String s)引发异常{
//判断逻辑,将特定的产品角色返回给客户
if(s.equalsIgnoreCase(“ Benz”))
返回新奔驰();
否则,如果(s.equalsIgnoreCase(“ Bmw”))
返回新宝马();
......
否则抛出新的Exception();
. .
//欢迎新贵...
公共类大亨{
public static void main(字符串[] args){
尝试{

//告诉驾驶员我今天要乘奔驰
Car car = Driver.driverCar(“ benz”);
//命令: 驱动器
car.drive();
. .
您可以在填写剩余信息后运行该程序. 如果将所有类都放在一个文件中,请不要忘记只能将一个类声明为public. 该程序在jdk1.4下运行.
这是简单的工厂模式. 易于使用吗?那么它带来了什么好处?
首先java设计模式代码,在使用简单的工厂模型之后,我们的程序不再“生病”,更符合实际情况;并且客户免除了直接创建产品对象的责任,仅对“消费”产品负责(作为爆发家庭).
现在,我们从打开和关闭(打开到扩展;关闭到修改)的原理分析简单的工厂模型. 当新贵添加汽车时,只要符合抽象产品建立的合同,只要通知了工厂类别,客户就可以使用它. 因此对于产品部分,符合开合原理;但是工厂部分似乎并不理想,因为每次添加汽车时,都必须在工厂类中添加相应的业务逻辑或判断逻辑,这显然违反了开闭原则. 可以想象工厂类对于增加新产品是非常被动的. 对于这样的工厂班级(在我们的示例中为驾驶员主班),我们将其称为全能班或上帝班.
我们给出的示例是最简单的情况,在实际应用中,该产品很可能是多层树结构. 由于在简单工厂模式中只有一种工厂类别对应于这些产品,因此这可能使我们筋疲力尽,也使我们程序员疲惫: (
工厂方法模型显示为救星.
四种工厂方法模式
工厂方法模式在简单工厂模式中删除了工厂方法的静态属性,因此可以被子类继承. 这样,简单工厂模式下集中在工厂方法上的压力可以由工厂方法模式下的不同工厂子类共享.
您可能应该猜出工厂方法模式的结构,并查看其组成:
1)抽象工厂角色: 这是工厂方法模式的核心,与应用程序无关. 是具体工厂角色必须实现的接口,还是必须继承的父类. 在Java中,它是通过抽象类或接口实现的.
2)特定工厂角色: 它包含与特定业务逻辑相关的代码. 由应用程序调用以创建相应的产品特定对象.
3)抽象产品角色: 它是具体产品继承或其实现的接口的超类. 通常,有一些抽象类或接口可以在Java中实现.
4)特定产品角色: 由特定工厂角色创建的对象是该角色的一个实例. 通过Java中的具体类实现.
工厂方法模式使用从抽象工厂角色继承的多个子类,而不是简单工厂模式中的“上帝类”. 如上所述,这将分担物体上的压力. 这将使结构变得灵活-在生产新产品(即新贵汽车)时,只需遵循合同生成的内容,这样客户便可以使用它而无需修改任何现有代码. 可以看出,工厂角色的结构也符合开闭原则!
我们仍然有旧的规则,请使用完整的示例来查看工厂模型的角色是如何协调的. 据说,新贵企业越来越大,自己的汽车越来越多. 这对于驾驶员和主人来说是痛苦的. 必须记住任何一辆汽车,进行保养,并为他使用!因此,这位暴发户对他表示同情,他说: 见到你和我这么多年了,将来不必再努力工作了,我会给你分配一些人力,你可以管理他们!因此,出现了工厂方法模型的管理. 代码如下:
代码:
//抽象产品角色. 具体的产品角色类似于简单的工厂模型,但是它们变得更加复杂.
//抽象工厂角色
公共接口驱动程序{
public Car driverCar();
}

公共类BenzDriver实现驱动程序{
公共汽车驾驶员汽车(){
返回新奔驰();
}
}
公共类BmwDriver实现驱动程序{
公共汽车驾驶员汽车(){
返回新宝马();
}
}
//应该与特定产品形成对应关系...
//请给我一个暴发户
公共类大亨{
public static void main(字符串[] args){
尝试{
驱动程序驱动程序=新的BenzDriver();
Car car = driver.driverCar();
car.drive();
}
...
}
可以看出,工厂方法的添加成倍增加了对象的数量. 当产品种类繁多时,将有大量相应的工厂对象,这不是我们想要的. 因为如果无法避免这种情况,则可以考虑使用简单工厂模式和工厂方法模式的组合来减少工厂类别: 即,对产品树上的相似物种(通常是叶子中的兄弟姐妹)使用简单工厂. 树)模式来实现.
五,总结
工厂方法模式似乎完美地包装了对象的创建,因此客户端程序仅处理抽象产品角色提供的接口. 那么,我们是否必须在代码的各处都设有工厂?这不是必要的. 在以下情况下,也许您可以考虑使用工厂方法模式:
1)当客户端不需要知道要使用的对象的创建过程时.
2)客户端程序使用的对象可能会更改,或者不清楚使用哪个特定对象.
简单的工厂模式和工厂方法模式真的可以避免代码更改吗?不可以. 在简单工厂模式下,添加新产品需要修改工厂角色中的判断语句. 在工厂方法模式下java设计模式代码,要么将判断逻辑留在抽象工厂角色中,要么将特定工厂角色写在客户端程序中(就像上面的示例一样),并且产品对象创建条件的改变将不可避免地导致修改工厂角色.
面对这种情况,Java的反射机制和配置文件的巧妙结合打破了限制-这在Spring中得到了完美体现.
六种抽象工厂模式
首先让我们了解产品系列是什么: 位于不同产品层次结构中的功能相关产品系列. 让我们用一个例子生动地说明它.
回到抽象工厂模式主题.
可以说抽象工厂模式和工厂方法模式之间的区别在于创建对象的复杂性. 抽象工厂模式是这三种模式中最抽象和通用的.
抽象工厂模式的目的是为客户提供一个接口,以在多个产品系列中创建产品对象.
使用抽象工厂模式时必须满足以下条件:
1)系统中有多个产品系列,并且系统一次只能使用一个产品系列.
2)使用属于同一产品系列的产品.
查看抽象工厂模式的角色(与工厂方法相同):
1)抽象工厂角色: 这是工厂方法模式的核心,与应用程序无关. 是具体工厂角色必须实现的接口,还是必须继承的父类. 在Java中,它是通过抽象类或接口实现的.
2)特定工厂角色: 它包含与特定业务逻辑相关的代码. 由应用程序调用以创建相应的特定于产品的对象. 在Java中,它是由具体类实现的.
3)抽象产品角色: 它是具体产品继承或其实现的接口的超类. 通常,有一些抽象类或接口可以在Java中实现.
4)特定产品角色: 由特定工厂角色创建的对象是该角色的一个实例. 通过Java中的具体类实现.
我已经看过前两种模式,并且我应该对这种模式下各种角色之间的协调有一个很好的了解. 我不会给出具体示例. 只要确保满足使用抽象工厂模式的条件即可.
//
工厂方法模式:
抽象产品类可以派生多个具体的产品类.
抽象工厂类可以派生多个具体工厂类.
每个具体的工厂类只能创建一个特定产品类的实例.
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生多个具体产品类.
抽象工厂类可以派生多个具体工厂类.
每个具体的工厂类可以创建一个特定产品类的多个实例.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-154289-1.html
据说他们利用美国技术
至于被平均的部份肯定在不你手中