网站首页 > 教程分享 正文
今天跟大家分享一下工厂设计模式家族中的“抽象工厂模式”。
简介
了解工厂模式的都知道,工厂模式就是用于大量创建某种,某类,或者某批对象时的一种优秀的解决方案。本文介绍的“抽象工厂模式”就是工厂模式的一种体现,是属于建造型模式的一种。
抽象工厂模式中有四个角色:分别是抽象产品角色,具体产品角色,抽象工厂角色,具体工厂角色。
其实“抽象工厂模式”很好理解,我给大家举个小例子,各位优秀的读者们应该就可以看懂了,看的时候记得将上面的四种角色代入进去,这样方便大家理解与记忆。
一个老板,想要生产汽车(这里所说的汽车,并没有指出具体的类型,只是一个大的方向,它对应的就是“抽象产品角色”)。
一开始创业肯定是规模较小,从而选择生产国产汽车,比如:国产轿车、SVU等等(这提出的轿车,就是一个具体的产品,它对应的就是“具体产品角色”),此时一个工厂就可以了。
当老板经过一段时间的经营后,赚钱了想要扩展,不满足只生产“国产车”了,还想生产“合资车”,这时候又需要再开一个工厂。随着产业的不断发展,以后肯定会涉及到其它汽车,比如用电的、用油的……那么作为一个老板为了方便管理,肯定需要设立一个“总公司”(总公司对应的就是“抽象工厂角色”),制定一套规范,让其它子公司(子公司对应的就是“具体工厂角色”)都遵守。但是具体子公司怎么把汽车制造出来,总公司不需要了解。
我们把这样的一套模式,应用到编程中,就形成了“抽象工厂模式”。
代码
通过单纯的文字描述可能大家理解的不是特别的清晰,下面我们就是将文字转换成代码,从而加深大家对“抽象工厂模式”的理解。
“抽象产品角色”对应的代码:
/**
* 车辆抽象类
*/
public abstract class Vehicle {
/**
* 生产车的抽象方法
*/
public abstract void production();
}
“具体产品角色”对应的代码:
/**
* 国产轿车
*/
public class DomesticCar extends Vehicle {
@Override
public void production() {
System.out.println("生产出一辆国产轿车!");
}
}
/**
* 国产SUV
*/
public class DomesticSUV extends Vehicle {
@Override
public void production() {
System.out.println("生产出一辆国产SUV!");
}
}
/**
* 国产货车
*/
public class DomesticTruck extends Vehicle {
@Override
public void production() {
System.out.println("生产出一辆国产货车!");
}
}
/**
* 合资轿车
*/
public class JointVentureCar extends Vehicle {
@Override
public void production() {
System.out.println("生产出一辆合资轿车!");
}
}
/**
* 合资SUV
*/
public class JointVentureSUV extends Vehicle {
@Override
public void production() {
System.out.println("生产出一辆合资SUV!");
}
}
/**
* 合资货车
*/
public class JointVentureTruck extends Vehicle {
@Override
public void production() {
System.out.println("生产出一辆合资货车!");
}
}
“抽象工厂角色”对应的代码:
/**
* 抽象工厂接口
*/
public interface AbsFactory {
// 创建车辆子类实例的方法。
Vehicle createVehicle(String vehicleType);
}
“具体工厂角色”对应的代码:
/**
* 生产国产车的工厂
*/
public class DomesticFactory implements AbsFactory {
@Override
public Vehicle createVehicle(String vehicleType) {
Vehicle vehicle = null;
switch (vehicleType) {
case "car":
vehicle = new DomesticCar();
break;
case "suv":
vehicle = new DomesticSUV();
break;
case "truck":
vehicle = new DomesticTruck();
break;
}
return vehicle;
}
}
/**
* 生产合资车的工厂
*/
public class JointVentureFactory implements AbsFactory {
@Override
public Vehicle createVehicle(String vehicleType) {
Vehicle vehicle = null;
switch (vehicleType) {
case "car":
vehicle = new JointVentureCar();
break;
case "suv":
vehicle = new JointVentureSUV();
break;
case "truck":
vehicle = new JointVentureTruck();
break;
}
return vehicle;
}
}
测试类:
public class Demo {
public static void main(String[] args) {
AbsFactory domesticFactory = new DomesticFactory();
domesticFactory.createVehicle("car").production();
JointVentureFactory jointVentureFactory = new JointVentureFactory();
jointVentureFactory.createVehicle("car").production();
}
}
总结
优点:
实例化对象时不需要单独创建,只要通过工厂类就可以得到,大大提高了代码的复用性。并且也不必考虑创建对象的过程,只关注结果就可以,从而也提高了软件的封装性。
缺点:
抽象工厂模式不利于软件的扩展,每次新增产品时需要修改很多类。
今天的分享就到这里了,如果感觉“菜鸟”写的文章还不错,记得点赞加关注呦!你们的支持就是我坚持下去的动力。文章哪里写的有问题的也希望大家可以指出,我会虚心受教。
猜你喜欢
- 2024-10-18 设计模式之 抽象工厂(抽象工厂模式的简单应用)
- 2024-10-18 Aha!设计模式(3)-抽象工厂(2)(抽象工厂模式结构图)
- 2024-10-18 Java经典设计模式-抽象工厂模式(抽象工厂模式在spring的应用)
- 2024-10-18 Java高级编程细节——工厂模式之抽象工厂
- 2024-10-18 java与设计模式-简单工厂-工厂方法-抽象工厂
- 2024-10-18 简单工厂,工厂方法,抽象工厂(简单工厂,工厂方法,抽象工厂区别)
- 2024-10-18 Aha!设计模式(1)-抽象工厂(1)(抽象工厂实例)
- 2024-10-18 抽象工厂模式(Abstract Factory)(抽象工厂模式的意图是)
- 2024-10-18 设计模式记录-抽象工厂模式(抽象工厂模式与工厂方法模式)
- 2024-10-18 白话设计模式之抽象工厂模式(抽象工厂模式是简单工厂模式的升级版本)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)