
设计模式
抽象工厂模式可以说是工厂方法模式的升级版本. 当要创建的产品具有多个产品线(产品系列)时,最好使用抽象工厂模式.
我们一直生产联想和惠普生产的计算机联想平板工厂模式,但是计算机也具有多种产品线: 台式机,笔记本电脑和平板电脑. 联想和惠普都在这些不同的产品线上生产计算机. 无法满足需求,本文我们使用抽象工厂模式来解决此问题.
提供一个用于创建一组相关或相互依赖的对象的接口,而无需指定它们的特定类.

9bc91a45209d06698bf8dc97375d5396.png

抽象工厂模式中的以下角色:
联想和惠普生产的计算机分为两条产品线,一台台式机和一台笔记本电脑. 为了解决增加产品线的问题,我们使用抽象工厂模式来实现.
首先定义抽象产品类别:
public abstract class DesktopComputer {
public abstract void start();
}
public abstract class NotebookComputer {
public abstract void start();
}
两个抽象产品类是DesktopComputer和NotebookComputer,它们用于定义两个产品线: Desktop和Notebook. 它们都定义了一种启动计算机的启动方法.
特定产品是Lenovo和HP台式机和笔记本电脑,如下所示.

public class LenovoDesktopComputer extends DesktopComputer {
@Override
public void start() {
System.out.println("联想台式电脑启动");
}
}
public class HpDesktopComputer extends DesktopComputer {
@Override
public void start() {
System.out.println("惠普台式电脑启动");
}
}
public class LenovoNotebookComputer extends NotebookComputer {
@Override
public void start() {
System.out.println("联想笔记本电脑启动");
}
}
public class HpNotebookComputer extends NotebookComputer {
@Override
public void start() {
System.out.println("惠普笔记本电脑启动");
}
}
接下来,创建一个用于生产计算机的抽象工厂,如下所示,
public abstract class ComputerFactory {
public abstract DesktopComputer createDesktopComputer();
public abstract NotebookComputer createNotebookComputer();
}
定义了两种方法,分别用于生产台式计算机和笔记本计算机.
定义联想和惠普工厂:
public class LenovoFactory extends ComputerFactory {
@Override
public DesktopComputer createDesktopComputer() {
return new LenovoDesktopComputer();
}
@Override
public NotebookComputer createNotebookComputer() {
return new LenovoNotebookComputer();
}
}
public class HpFactory extends ComputerFactory {
@Override
public DesktopComputer createDesktopComputer() {
return new HpDesktopComputer();
}
@Override
public NotebookComputer createNotebookComputer() {
return new HpNotebookComputer();
}
}

联想工厂和惠普工厂用于生产具有两种不同产品线(台式机和笔记本电脑)的计算机.
public class Client {
public static void main(String[]args) {
ComputerFactory lenocoFactory=new LenovoFactory();
lenocoFactory.createDesktopComputer().start();
lenocoFactory.createNotebookComputer().start();
ComputerFactory hpFactory=new HpFactory();
hpFactory.createDesktopComputer().start();
hpFactory.createNotebookComputer().start();
}
}
为便于理解,下面给出了此示例的UML图,如下所示.

2d40e62b7f16c9a945f7319500d50594.png
由于“打开和关闭原理”在抽象工厂模式中的倾斜,它倾斜地满足了“打开和关闭原理”,这为添加新产品系列提供了便利,但不能提供这样的功能. 添加新的产品结构. 设计的便利性,因此要求设计人员在设计之初就进行充分考虑,在设计完成后将不会在系统中添加新的产品等级结构,也不会删除现有的产品等级结构联想平板工厂模式,否则将会导致系统出现重大修改给后续维护工作带来了很多麻烦.
在以下情况下,您可以考虑使用抽象工厂模式:
“开放和关闭原则”的倾向
“打开和关闭原则”要求系统可以扩展,不能修改,以通过扩展来增强其功能. 对于涉及多个产品系列和多个产品层次结构的系统,增强功能包括两个方面:
出厂模式降级
设计模式(十三)抽象工厂模式
设计模式-抽象工厂模式
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shouji/article-179099-1.html
谁叫你们囤货的活该
#给烊烊520#1128生日评论集体向520万刷起来#护千玺到远方#
辛苦了