23种设计模式,三)抽象工厂模式

技术23种设计模式,三)抽象工厂模式 23种设计模式(三)抽象工厂模式简要概括23种设计模式之抽象工厂模式三、抽象工厂模式
? 前面介绍的工厂方法模式中考虑的是一类产品的生产,如汽车厂商生产汽车,手机

23设计模式(三)抽象工厂

简要总结23种设计模式的抽象工厂

三、抽象工厂模式

?上面介绍的工厂方法模型考虑的是一类产品的生产,比如生产汽车的汽车厂商和生产手机的手机厂商。但是,在日常生活中,手机厂商不一定只生产手机。比如华为也生产路由器和电脑。显然,工厂模式解决不了这种问题。

?这里可以介绍产品族和产品等级的概念。如下图所示,海尔和TCL都可以同时生产电视机和空调。这里同一个厂家生产的系列是一个产品系列,同一个产品就是产品档次。工厂模式只能解决产品等级上的问题,而产品族则是由抽象工厂模式来解决。

3.1 抽象工厂模式的特点

除了工厂模型的特点,抽象工厂还具有:

与产品系列相关联的多级产品可以在一个类中联合管理,而无需引入几个新的类来管理。

当需要一个产品族时,抽象工厂可以保证客户端始终只使用同一产品的产品组。

抽象工厂增强了程序的可扩展性,在添加新的产品系列时,不需要修改原始代码来满足开放封闭原则。

缺点:

当一个新产品需要添加到产品系列中时,所有的工厂类都需要修改。增加了系统的抽象性和理解难度。

3.2 抽象工厂模式的实现

抽象工厂的主要角色如下。

摘要工厂:提供了一个创建产品的界面,包括几种创建产品的方法,newProduct(),可以创建不同档次的产品。

具体工厂:主要在抽象工厂中实现几种抽象方法,完成具体产品的创建。

摘要产品:它定义了产品规格,描述了产品的主要特征和功能。抽象工厂有很多抽象产品。

具体产品:实现抽象产品角色定义的接口,由具体工厂创建,与具体工厂有多对一的关系。

请看下面的例子。我们用小米和华为的例子来实现抽象工厂。

/**

*抽象产品工厂

*

* @作者kimariyb

*/

公共接口ProductFactory {

/**

*生产移动电话

* @返回制造的手机型号

*/

phone product phone product();

/**

*生产路由器

* @返回制造的路由器型号

*/

router product router product();

}

/**

*手机产品界面

*

* @作者kimariyb

*/

公共接口电话产品{

void start();

void close();

void call();

}

/**

*路由器接口

*

* @作者kimariyb

*/

公共接口路由器产品{

void start();

void close();

void SentWeb();

}

/**

*小米手机

*

* @作者kimariyb

*/

公共类小米手机实现PhoneProduct{

@覆盖

public void start(){ 0

System.out.println('小米手机开机');

}

@覆盖

public void close(){ 0

System.out.println('小米手机关机');

}

@覆盖

public void call(){ 0

System.out.println('小米手机通话');

}

}

/**

*华为手机

*

* @作者kimariyb

*/

公共类HuaweiPhone实现PhoneProduct{

@覆盖

public void start(){ 0

System.out.println('华为手机开机');

}

@覆盖

public void close(){ 0

System.out.println('华为手机关机');

}

@覆盖

public void call(){ 0

System.out.println('华为手机通话');

}

}

/**

*小米路由器

*

* @作者kimariyb

*/

公共类小米路由器实现RouterProduct{

@覆盖

public void start(){ 0

System.out.println('小米路由器开启');

}

@覆盖

public void close(){ 0

System.out.println('小米路由器关闭');

}

@覆盖

public void sent WeB(){ 0

System.out.println('小米路由器发送网络');

}

}

/**

*华为路由器

*

* @作者kimariyb

*/

公共类HuaweiRouter实现RouterProduct{

@覆盖

public void start(){ 0

System.out.println('华为路由器开机');

}

@覆盖

public void close(){ 0

System.out.println('华为路由器关机');

}

@覆盖

public void send WeB(){ 0

System.out.println('华为路由器发送网络');

}

}

/**

* 小米工厂

* @作者kimariyb

*/

公共类小米工厂实现ProductFactory {

@覆盖

公共电话产品电话产品(){ 0

返回新的小米手机();

}

@覆盖

公共路由器产品路由器产品()

返回新的小米路由器();

}

}

/**

* 华为工厂

*

* @作者kimariyb

*/

公共类华威工厂实现了ProductFactory {

@覆盖

公共电话产品电话产品(){ 0

返回新的华威手机();

}

@覆盖

公共路由器产品路由器产品()

返回新的huaweiouter();

}

}

简单的分析改实例,小米和华为都能生产手机和路由器,很显然这涉及到了产品族,需要使用抽象工厂模式来实现。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/112513.html

(0)

相关推荐

  • flex布局中遇到的问题(flex开发技术)

    技术Flex开发时需要注意哪些问题这篇文章给大家分享的是有关Flex开发时需要注意哪些问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Flex开发心得小结和Flash的开发环境相比,Flex

    攻略 2021年12月14日
  • 怎样使用HLAscan进行HLA分型

    技术怎样使用HLAscan进行HLA分型这篇文章将为大家详细讲解有关怎样使用HLAscan进行HLA分型,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。HLAScan是由韩

    攻略 2021年11月10日
  • 会意字大全,象形、指事、会意、形声字各二十个

    技术会意字大全,象形、指事、会意、形声字各二十个象形字:雨会意字大全、元、木、眉、左、右、门、龟、车、月、龟、马、鱼、日、门、木、山、手、羊、草、鸟、虫、川、耳、口、人、田、水、火 指事字:上、一、二、下、丨、丩、爻、元

    2021年10月21日
  • 怎么快速掌握scrapy爬虫框架

    技术怎么快速掌握scrapy爬虫框架这篇文章主要介绍“怎么快速掌握scrapy爬虫框架”,在日常操作中,相信很多人在怎么快速掌握scrapy爬虫框架问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

    攻略 2021年10月22日
  • 共轭体系,什么是环状闭合共轭体系

    技术共轭体系,什么是环状闭合共轭体系有共轭的环状化合物 环状化合物可以是部分或完全的共轭共轭体系。轮烯是一个完全共轭单环的碳氢化合物,可以是芳香烃,非芳香烃或反芳香烃。
    (一)芳香烃化合物
    是一个环状平面有共轭的化合

    生活 2021年10月23日
  • selenium测试过程动了键盘(selenium判断点击事件是否成功)

    技术selenium中键盘事件的示例分析这篇文章主要介绍了selenium中键盘事件的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。例:from

    攻略 2021年12月17日