抽象工厂模式
创始人
2024-02-07 16:59:46
0

思考抽象工厂模式

抽象工厂专注于产品簇的实现,主要是那些有关联关系的,如果只有一个产品的话就退化成了工厂方法模式

1.抽象工厂模式的本质

抽象工厂模式的本质:选择产品簇的实现。

产品簇(Product family)指具有相同或相似的功能结构或性能,共享主要的产品特征、组件或子结构,并通过变型配置来满足特定市场的一组产品的聚类。

工厂方法是选择单个产品的实现,虽然一个类里面可以有多个工厂方法,但是这些方法之间一般是没有联系的,即使看起来像有联系。

但是抽象工厂着重的就是为一个产品簇选择实现,定义在抽象工厂里面的方法通常是有联系的,它们都是产品的某一部分或者是相互依赖的。如果抽象工厂里面只定义一个方法,直接创建产品,那么就退化成为工厂方法了。

2.何时选用抽象工厂模式

建议在以下情况中选用抽象工厂模式。

  • 如果希望一个系统独立于它的产品的创建、组合和表示的时候。换句话说,希望一个系统只是知道产品的接口,而不关心实现的时候。
  • 如果一个系统要由多个产品系列中的一个来配置的时候。换句话说,就是可以动态地切换产品簇的时候。
  • 如果要强调一系列相关产品的接口,以便联合使用它们的时候。

3.实现

cpu产品

/*** @description:cpu接口*/
public interface Cpu {/*** 初始化cpu*/void initCpu();
}/*** @description:英特尔cpu*/
public class IntelCpu implements Cpu{//针脚private int pins=0;public IntelCpu(int pins){this.pins=pins;}@Overridepublic void initCpu() {System.out.println("Cpu-->英特尔 针脚数"+pins);}
}/*** @description:AMDcpu*/
public class AmdCpu implements Cpu{private int pins=0;public AmdCpu(int pins){this.pins=pins;}@Overridepublic void initCpu() {System.out.println("Cpu-->AMD 针脚数"+pins);}
}

主板接口

/*** @description:主板接口*/
public interface Mainboard {/*** 初始化主板*/void initMainBoard();
}/*** @description:华硕主板*/
public class AsusMainboard implements Mainboard{//针脚private int pins=0;public AsusMainboard(int pins){this.pins=pins;}@Overridepublic void initMainBoard() {System.out.println("Mainboard-->华硕 针脚数"+pins);}
}/*** @description:微星主板*/
public class MsiMainboard implements Mainboard{private int pins=0;public MsiMainboard(int pins){this.pins=pins;}@Overridepublic void initMainBoard() {System.out.println("Mainboard-->微星 针脚数"+pins);}
}

抽象工厂

/*** @description:抽象工厂*/
public interface AbstractFactory {/*** 创建cpu* @return*/Cpu createCpu();/*** 创建主板* @return*/Mainboard createMainboard();
}/*** @description:自组电脑1 (英特尔cpu+华硕主板) 假设都是1156针脚*/
public class CustomComputer1 implements AbstractFactory{@Overridepublic Cpu createCpu() {return new IntelCpu(1156);}@Overridepublic Mainboard createMainboard() {return new AsusMainboard(1156);}
}/*** @description:自组电脑2 (AMDcpu + 微星主板) 假设都是963针脚*/
public class CustomComputer2 implements AbstractFactory{@Overridepublic Cpu createCpu() {return new AmdCpu(963);}@Overridepublic Mainboard createMainboard() {return new MsiMainboard(963);}
}

组装类

/*** @description:工程师组装电脑*/
public class Engineer {/*** cpu*/private Cpu cpu=null;/*** 主板*/private Mainboard mainboard=null;/*** 组装电脑* @param factory*/public void makeComputer(AbstractFactory factory){cpu=factory.createCpu();mainboard=factory.createMainboard();cpu.initCpu();mainboard.initMainBoard();}}

测试

public class Client {public static void main(String[] args) {Engineer engineer = new Engineer();//顾客想组装的电脑配置engineer.makeComputer(new CustomComputer1());}
}

类图
在这里插入图片描述

相关内容

热门资讯

原创 就... 【军武次位面】作者:乐乐 日前,美国“Military Watch”网站报道称,中国海军一艘“基洛”...
输球又输点!阿森纳赛后点球3-... 在刚刚结束的季前友谊赛中,阿森纳以2-3不敌比利亚雷亚尔,随后在点球大战中以3-4失利,令人意外的是...
8月1日起乌鲁木齐天山国际机场... 2025年8月1日起,新疆机场集团乌鲁木齐天山国际机场将迎来一项关键服务升级:所有国内出港航班值机手...
“我就在这儿坐着怎么了”,火车... 安全乘车,文明出行,是每一位公民应尽的责任和义务。近日,旅客李某持无座车票强占其他旅客座位,经乘警多...
黑龙江省制定出台20条政策措施... 近日,黑龙江制定出台支持高端智能农机装备产业高质量发展20条政策措施。旨在引导产学研用等各方用好国家...
债券利息收入增值税新规落地在即... 债券利息收入税收新规实施前夕,政策性银行密集发行金融债。 8月5日,中国债券信息网披露的信息显示,中...
静乐县公安局征集“六霸”及殡葬... 为深入开展群众身边不正之风和腐败问题集中整治,严厉打击“六霸”及殡葬等领域涉民生违法犯罪,现向社会各...
原创 欧... 欧洲媒体在8月5日的报道中提到,美国与欧洲似乎达成一致,准备联合打压俄罗斯石油的主要买家——中国和印...
普京与美特使聊了3小时之后,特... 来源:视觉中国 俄罗斯总统普京与美国特使威特科夫的会晤在持续近3小时后结束。 据新华社报道,俄总统助...