比如要生产华为手机,华为路由器,小米手机,小米路由器
先写路由器和手机的接口:

package abstract1;//手机产品接口
public interface IphoneProduct {void start();void shutdown();void callup();void sendMes();
}
package abstract1;//路由器产品接口
public interface IRouteProduct {void start();void shutdown();void openWifi();void setting();
}

再分别实现一个小米手机和小米路由器
以及华为手机华为路由器

package abstract1;//小米手机
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 sendMes() {System.out.println("小米发短信");}
}
package abstract1;//小米路由器
public class XiaomiRoute implements IRouteProduct {@Overridepublic void start() {System.out.println("启动小米路由器");}@Overridepublic void shutdown() {System.out.println("关闭小米路由器");}@Overridepublic void openWifi() {System.out.println("打开小米wifi");}@Overridepublic void setting() {System.out.println("小米设置");}
}

华为手机和路由器

package abstract1;//华为手机
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 sendMes() {System.out.println("华为手机发短信");}
}
package abstract1;//华为路由器
public class HuaweiRoute implements IRouteProduct {@Overridepublic void start() {System.out.println("启动华为路由器");}@Overridepublic void shutdown() {System.out.println("关闭华为路由器");}@Overridepublic void openWifi() {System.out.println("打开华为wifi");}@Overridepublic void setting() {System.out.println("华为设置");}
}

再实现一个产品工厂接口,生产手机和路由器:

package abstract1;//抽象产品工厂
public interface IProductFactory {//生产手机IphoneProduct iphoneProduct();//生产路由器IRouteProduct routerProduct();
}

然后再实现这个接口,
华为生产手机和路由器的工厂
小米生产手机和路由器的工厂:

package abstract1;//华为工厂
public class HuaweiFactory implements IProductFactory {@Overridepublic IphoneProduct iphoneProduct() {return new HuaweiPhone();}@Overridepublic IRouteProduct routerProduct() {return new HuaweiRoute();}
}
package abstract1;//小米工厂
public class XiaomiFactory implements IProductFactory {@Overridepublic IphoneProduct iphoneProduct() {return new XiaomiPhone();}@Overridepublic IRouteProduct routerProduct() {return new XiaomiRoute();}
}

最后模拟一个client去调用

package abstract1;public class Client {public static void main(String[] args) {System.out.println("-----------小米系列产品------------");//小米工厂XiaomiFactory xiaomiFactory = new XiaomiFactory();IphoneProduct iphoneProduct = xiaomiFactory.iphoneProduct();iphoneProduct.callup();iphoneProduct.shutdown();IRouteProduct iRouteProduct = xiaomiFactory.routerProduct();iRouteProduct.openWifi();iRouteProduct.setting();System.out.println("-----------华为系列产品------------");//华为工厂HuaweiFactory huaweiFactory = new HuaweiFactory();iphoneProduct = huaweiFactory.iphoneProduct();iphoneProduct.callup();iphoneProduct.shutdown();iRouteProduct = huaweiFactory.routerProduct();iRouteProduct.openWifi();iRouteProduct.setting();}
}


总结一下,抽象工厂就是工厂的工厂

好了,今天就先到这里

小白都能懂的设计模式 java版 抽象工厂模式 实战练习(超详细)相关推荐

  1. 小白都能懂的设计模式 java版 静态代理模式实战练习(超详细)

    静态代理: 角色分析: 抽象角色:一般使用接口或者是抽象类来解决 真实角色:被代理的角色 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作 客户:访问代理对象的人 以一个租房子的例子来 ...

  2. 小白都能懂的设计模式 java版 原型模式 存在浅拷贝问题以及解决办法(超详细)

    在这一节里,https://blog.csdn.net/weixin_45806131/article/details/109282894 是一个浅拷贝,v1和v2同时指向date, 写个例子: pa ...

  3. 设计模式C#描述——抽象工厂模式

    设计模式C#描述--抽象工厂模式 阅读此文应先阅读简单工厂模式与工厂方法模式 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产 ...

  4. 设计模式二、抽象工厂模式

    设计模式part2 1.     抽象工厂模式 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题, ...

  5. JavaScript 23 种设计模式之 4 抽象工厂模式

    JavaScript 23 种设计模式之 4 抽象工厂模式 概念与特点 结构与实现 应用场景 应用实例 总结 概念与特点 概念: 提供一组相关或相互依赖对象的接口.抽象工厂模式是工厂方法模式的升级版, ...

  6. java抽象工厂模式实例_Java设计模式百例 - 抽象工厂模式

    抽象工厂模式是在工厂方法模式之上的有一次升级,以便能够处理更加复杂的对象创建场景.因此也是所有形态的工厂模式中最为抽象和最具一般性的一种形态. 有朋友可能会想了,工厂方法模式已经是对简单工厂模式的具体 ...

  7. java设计模式六(抽象工厂模式)

    java设计模式-抽象工厂模式 一.概述 抽象工厂模式是在工厂模式的基础上,加上了一个管理工厂的超级工厂.也就是说,工厂的作用是管理各种有相似功能的类,而超级工厂的作用是管理这些工厂. 二.模式示例: ...

  8. 【设计模式】之抽象工厂模式详解与应用(三)

    开心一刻 [问:"怎么样才能给足男人面子"? 神回复:"露出腿上的淤青啊".] 课程介绍 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工 ...

  9. 设计模式(3):抽象工厂模式(Abstract Factory Pattern)

    1.继续工厂方法模式 在工厂方法模式中,介绍了一个工厂类创建一中产品,所有的工厂类都是基于接口实现的,所有的产品也是基于接口实现的.这样当增加新的产品的时候只需要实现新的工厂类和新的产品类即可,满足了 ...

最新文章

  1. 【每日DP】day1 P1802 5倍经验日(别样的01背包)难度⭐★
  2. 石头剪刀布 手势识别
  3. r与python自然语言处理_Python自然语言处理实践: 在NLTK中使用斯坦福中文分词器 | 我爱自然语言处理...
  4. CSS中的position
  5. centos7 python3.6编译安装
  6. 面试 jsp转发和重定向
  7. Scaffold php,GitHub - yiiplus/scaffold: scaffold是一个基于Yii2高级项目模版工程化实现的应用程序...
  8. 【LeetCode笔记】124. 二叉树中的最大路径和(Java、二叉树、DFS)
  9. rabbitmq接收不到消息 防火墙_用PHP+RabbitMQ实现消息的发送和接收
  10. 如何使用Docker部署Go Web应用
  11. python中123+5.0的执行结果_python实战笔记(一)
  12. ssm游文化推广系统答辩PPT模板
  13. model Ensemble
  14. Spark集群新增节点方法
  15. 《3D数学基础:图形与游戏开发》
  16. c#高级编程(第八版)-第六章数组随笔
  17. 计算机是如何工作的?
  18. BTA分论坛现场直击|区块链+时下新科技,你了解多少?
  19. mysql LAST_DAY() 函数
  20. 安全研究 # Neural Network-based Graph Embedding for Cross-Platform Binary Code Similarity Detection

热门文章

  1. 神锁离线版插件的安全设计
  2. 苹果蓝牙连接不上是什么原因_无线网连接不上 原因很多,总有一个办法解决你的问题...
  3. [Android]SQLite版本升级前后数据对比
  4. 小满Router(第一章入门)
  5. 港科夜闻|香港科大(广州)系统枢纽署理院长李世玮教授成为首位获电子封装领域最重要荣誉大奖的中国科学家...
  6. 互联网寒冬来袭,面对裁员和竞争的双重压力,程序员该何去何从?
  7. 数据可视化之大数据可视化
  8. 【阅读】数据之美,一本书学会可视化设计
  9. 你不知道的雍正八年版《连平州志》
  10. 【CRM】ReferenceError: XXX is not defined at eval(eval at RunHandlerInternal)