设计模式:

前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定。而是一套用来提高代码可复用性、可维护性、可读性、稳健性、以及安全性的解决方案

设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。

正确使用设计模式具有以下优点:

  • 可以提高程序员的思维能力、编程能力和设计能力。
  • 使程序设计更加标准化、代码编制更加I程化,使软件开发效率大大提高,从而缩短软件的开发周期。
  • 使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。

详细工厂模式可参考————>简单工厂模式 中详细介绍

`抽象工厂模式:`

  • 围绕-个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。

定义:抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口, 无需指定它们具体的类

适用场景:
    客户端(应用层)不依赖于产品类实例如何被创建、实现等细节
    强调一系列相关的产品对象(属于同一产品族) 一起使用创建对象需要大量的重复代码
    提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现
优点:
    具体产品在应用层的代码隔离,无需关心创建的细节
    将一个系列的产品统一到一起创建
缺点:
    规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难; 
    增加了系统的抽象性和理解难度

理解类图

下面附上代码

顶级结构,抽象工厂的工厂

/*** @Descrintion:抽象产品工厂* @version: 1.0*/
public interface IProductFactory {//生成手机IphoneProduct iphoneProduct();//生产路由器IRouterProduct irouterProduct();
}

实现顶级工厂的工厂----手机

/*** @Descrintion:抽象工厂模式* @version: 1.0*/
public interface IphoneProduct {void start();void shutdown();void callup();void sendSMS();
}

路由器

/*** @Descrintion:路由器产品接口* @version: 1.0*/
public interface IRouterProduct {void start();void shutdown();void openWifi();void Srtting();}

子工厂去实现创造---实现公司产品

/*** @Descrintion:* @version: 1.0*/
public class HuaWeiFactory implements IProductFactory {@Overridepublic IphoneProduct iphoneProduct() {return new HuaWeiphone();}@Overridepublic IRouterProduct irouterProduct() {return new HuaWeiRouter();}
}
/*** @Descrintion:* @version: 1.0*/
public class XiaoMifactory implements IProductFactory {@Overridepublic IphoneProduct iphoneProduct() {return new XiaoMiPhone();}@Overridepublic IRouterProduct irouterProduct() {return new XiaoMiRouter();}
}

小米产品

/*** @Descrintion:小米牌的手机* @version: 1.0*/
public class XiaoMiPhone implements IphoneProduct {@Overridepublic void start() {System.out.println("启动小米手机");}@Overridepublic void shutdown() {System.out.println("关闭小米手机");}@Overridepublic void callup() {System.out.println("小米手机打电话");}@Overridepublic void sendSMS() {System.out.println("小米手机发短信");}
}
/*** @Descrintion:小米路由器* @version: 1.0*/
public class XiaoMiRouter implements IRouterProduct {@Overridepublic void start() {System.out.println("小米路由器开启");}@Overridepublic void shutdown() {System.out.println("小米路由器关闭");}@Overridepublic void openWifi() {System.out.println("小米路由器开启WiFi");}@Overridepublic void Srtting() {System.out.println("小米路由器设置");}
}

华为产品

/*** @Descrintion:华为手机厂商* @version: 1.0*/
public class HuaWeiphone implements IphoneProduct {@Overridepublic void start() {System.out.println("启动华为手机");}@Overridepublic void shutdown() {System.out.println("关闭华为手机");}@Overridepublic void callup() {System.out.println("华为手机打电话");}@Overridepublic void sendSMS() {System.out.println("华为手机发短信");}
}
/*** @Descrintion:华为路由器* @version: 1.0*/
public class HuaWeiRouter implements IRouterProduct {@Overridepublic void start() {System.out.println("华为路由器开启");}@Overridepublic void shutdown() {System.out.println("华为路由器关闭");}@Overridepublic void openWifi() {System.out.println("华为路由器开启WiFi");}@Overridepublic void Srtting() {System.out.println("华为路由器设置");}
}

重点:单独看没什么特别,综合起来看,我们看获取的时候是如何的便捷

/*** @Descrintion:获取相应的产品,只需要创建相应的公司工厂,就可以调用其公司方法* @version: 1.0*/
public class Client {public static void main(String[] args) {System.out.println("============小米系列产品============");//小米抽象工厂——————只有工厂这一句不同XiaoMifactory xiaoMifactory = new XiaoMifactory();IphoneProduct iphoneProduct = xiaoMifactory.iphoneProduct();iphoneProduct.callup();iphoneProduct.sendSMS();IRouterProduct iRouterProduct = xiaoMifactory.irouterProduct();iRouterProduct.openWifi();iRouterProduct.shutdown();System.out.println("============华为系列产品============");//华为抽象工厂——————只有工厂这一句不同HuaWeiFactory huaWeiFactory = new HuaWeiFactory();iphoneProduct = huaWeiFactory.iphoneProduct();iphoneProduct.callup();iphoneProduct.sendSMS();iRouterProduct = huaWeiFactory.irouterProduct();iRouterProduct.openWifi();iRouterProduct.shutdown();}
}

运行结果

设计模式之——抽象工厂模式相关推荐

  1. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  2. 设计模式三—抽象工厂模式

    设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...

  3. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  4. 设计模式复习-抽象工厂模式

    设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...

  5. 设计模式之四(抽象工厂模式第三回合)

    原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...

  6. python抽象工厂模式_Python设计模式之抽象工厂模式

    Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...

  7. 设计模式-04抽象工厂模式

    设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...

  8. C#设计模式(4)——抽象工厂模式

    C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...

  9. 设计模式之抽象工厂模式(Abstract Factory)摘录

    面向对象系统的分析和设计实际上追求的就是两点:高内聚(Cohesion)和低耦合(Coupling). 23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.Fa ...

  10. java 工厂模式的写法_Java23种设计模式之抽象工厂模式

    概述 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...

最新文章

  1. java根据日期判断星座_根据日期计算星座
  2. 手机客户端连接linux
  3. 怎样把做好的css样式改日期,Win8操作系统任务栏中日期样式怎么更改
  4. SAP 电商云 Spartacus UI quick order 搜索结果的索引设置实现
  5. java中的分层概念_Java分层概念
  6. 2018 年最受欢迎的 Python 库,你都用过吗?
  7. 使用devops的团队_DevOps团队的3种指标仪表板
  8. gitlab 只能owner 上传_代码管理-gitlab使用方法建议
  9. Dart的日期时间操作
  10. asio::io_service被废弃的问题
  11. 超详细的VSCode下载和安装教程以及解决VSCode下载速度特别慢的问题
  12. JavaScript if...else 语句
  13. Android仿微信视频聊天窗口,Android仿微信语音聊天界面设计
  14. 网站拒绝了你的请求服务器,服务器拒绝你的发送请求 - 卡饭网
  15. android 显示表情符号,吓一跳 同一表情符号iPhone和Android机显示效果差别这么大...
  16. 《Java 技术体系》之一:Java 技术体系概览
  17. 1688.item_search_img按图搜索1688商品(拍立淘)API的调用参数和实例
  18. 数模第五次作业:自己实现斯皮尔曼相关系数
  19. 强迫症的 Mac 设置指南
  20. uni-app实现类似物流进度跟踪功能

热门文章

  1. 视图,触发器,事务,存储过程,函数与流程控制,索引
  2. vs2015 动态链接库问题
  3. spring配置文件详解
  4. Pylot——跨平台的网站压力测试工具
  5. MP3文件格式说明 (转)
  6. DIY协同办公平台(C/S)系列3之内部邮箱篇
  7. 国人同庆,你我同乐哦!
  8. python 流式编程_Java8 Stream流式编程,极大解放你的生产力!
  9. C++11中thread库join和detach的区别
  10. vs2017+配置工程的编译路径(输出目录和中间目录)