视觉差网站插件,免费网站制作 优帮云,做网站的公司哪家强,全国中高风险地区最新名单抽象工厂模式
工厂方法模式中考虑的是一类产品的生产#xff0c;如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。
同种类称为同等级#xff0c;也就是说#xff1a;工厂方法模式中只考虑生产同等级的产品#xff0c;但是在现实生…抽象工厂模式
工厂方法模式中考虑的是一类产品的生产如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。
同种类称为同等级也就是说工厂方法模式中只考虑生产同等级的产品但是在现实生活中许多工厂是综合型的工厂能生产多等级种类 的产品如农场里既养动物又种植物电器厂既生产电视机又生产洗衣机或空调大学既有软件专业又有生物专业等。
然而抽象工厂模式将考虑多等级产品的生产将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族图 1 所示的是海尔工厂和 TCL 工厂所生产的电视机与空调对应的关系图。 图1 电器工厂的产品等级与产品族
抽象工厂模式的定义与特点
抽象工厂AbstractFactory模式的定义是一种为访问类提供一个创建一组相关或相互依赖对象的接口且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。使用抽象工厂模式一般要满足以下条件
可以在类的内部对产品族中相关联的多等级产品共同管理而不必专门引入多个新的类来进行管理。当需要产品族时抽象工厂可以保证客户端始终只使用同一个产品的产品组。抽象工厂增强了程序的可扩展性当增加一个新的产品族时不需要修改原代码满足开闭原则。
缺点当产品族中需要增加一个新的产品时所有的工厂类都需要进行修改。增加了系统的抽象性和理解难度。
抽象工厂模式的结构
抽象工厂模式的主要角色如下。 抽象工厂Abstract Factory提供了创建产品的接口它包含多个创建产品的方法 newProduct()可以创建多个不同等级的产品。 具体工厂Concrete Factory主要是实现抽象工厂中的多个抽象方法完成具体产品的创建。 抽象产品Product定义了产品的规范描述了产品的主要特性和功能抽象工厂模式有多个抽象产品。 具体产品ConcreteProduct实现了抽象产品角色所定义的接口由具体工厂来创建它同具体工厂之间是多对一的关系。
抽象工厂模式的主要角色如下。 图2 抽象工厂模式的结构图
抽象工厂模式的适用场景
1. 当需要将请求的发送者和接收者解耦时可以考虑使用抽象模式。 2. 当存在多个对象可以处理同一个请求时可以考虑使用抽象模式。 3. 当需要动态地指定可以处理请求的对象时可以考虑使用抽象模式。
简单的代码实现
// 抽象产品接口操作系统
interface OperatingSystem {void run();
}// 具体产品Windows操作系统
class WindowsOS implements OperatingSystem {Overridepublic void run() {System.out.println(Running Windows OS);}
}// 具体产品Linux操作系统
class LinuxOS implements OperatingSystem {Overridepublic void run() {System.out.println(Running Linux OS);}
}// 抽象产品接口应用程序
interface Application {void open();
}// 具体产品Word应用程序
class WordApplication implements Application {Overridepublic void open() {System.out.println(Opening Word Application);}
}// 具体产品Excel应用程序
class ExcelApplication implements Application {Overridepublic void open() {System.out.println(Opening Excel Application);}
}// 抽象工厂接口
interface SoftwareFactory {OperatingSystem createOperatingSystem();Application createApplication();
}// 具体工厂Windows工厂
class WindowsFactory implements SoftwareFactory {Overridepublic OperatingSystem createOperatingSystem() {return new WindowsOS();}Overridepublic Application createApplication() {return new ExcelApplication();}
}// 具体工厂Linux工厂
class LinuxFactory implements SoftwareFactory {Overridepublic OperatingSystem createOperatingSystem() {return new LinuxOS();}Overridepublic Application createApplication() {return new WordApplication();}
}// 抽象工厂模式通过SoftwareFactory接口和其实现类来创建不同类型的操作系统和应用程序。
// 客户端代码可以根据需要选择不同的工厂实例来创建不同的产品组合。
public class Client {public static void main(String[] args) {SoftwareFactory windowsFactory new WindowsFactory();OperatingSystem windowsOS windowsFactory.createOperatingSystem();Application windowsApp windowsFactory.createApplication();windowsOS.run();windowsApp.open();SoftwareFactory linuxFactory new LinuxFactory();OperatingSystem linuxOS linuxFactory.createOperatingSystem();Application linuxApp linuxFactory.createApplication();linuxOS.run();linuxApp.open();}
}