java23种设计模式(二)抽象工厂模式
我们接着上一章的工厂方法模式继续学习一下抽象工厂模式。
抽象工厂模式:在工厂模式中,如果有多个产品,则就是抽象工厂模式。
例子:
有一个工厂开了两个子公司,专门用来生产电脑配件键盘和鼠标,一个是联想工厂则生产联想的产品,另一个是宏碁工厂则生产宏碁的产品。
代码如下:
1、工厂接口(可以生产鼠标和键盘)
public interface Factory {
// 生产鼠标
Mouse createMouse();
// 生产键盘
KeyBoard createKeyBoard();
}
2、联想工厂(生产联想鼠标和键盘)
public class LenovoFactory implements Factory {
@Override
public Mouse createMouse() {
return new LenovoMouse();
}
@Override
public KeyBoard createKeyBoard() {
return new LenovoKeyBoard();
}
}
3、宏碁工厂(生产宏碁鼠标和键盘)
public class AcerFactory implements Factory {
@Override
public Mouse createMouse() {
return new AcerMouse();
}
@Override
public KeyBoard createKeyBoard() {
return new AcerKeyBoard();
}
}
4、键盘接口
public interface KeyBoard {
void getName();
}
5、联想键盘实现类
public class LenovoKeyBoard implements KeyBoard {
@Override
public void getName() {
System.out.println("这个是联想键盘");
}
}
6、宏碁键盘实现类
public class AcerKeyBoard implements KeyBoard {
@Override
public void getName() {
System.out.println("这个是宏碁键盘");
}
}
7、鼠标接口
public interface Mouse {
void getName();
}
8、联想鼠标接口
public class LenovoMouse implements Mouse {
@Override
public void getName() {
System.out.println("这个是联想鼠标");
}
}
9、宏碁鼠标接口
public class AcerMouse implements Mouse {
@Override
public void getName() {
System.out.println("这个是宏碁鼠标");
}
}
10、客户端(可以在联想工厂买联想鼠标和键盘,也可以在宏碁工厂买宏碁生产的鼠标和键盘)
@SpringBootTest
class FactoryApplicationTests {
@Test
void abstractF(){
LenovoFactory lenovoFactory = new LenovoFactory();
lenovoFactory.createKeyBoard().getName();
lenovoFactory.createMouse().getName();
AcerFactory acerFactory = new AcerFactory();
acerFactory.createKeyBoard().getName();
acerFactory.createMouse().getName();
}
}
总结:
(1)增加xx工厂:创建xx工厂,继承工厂接口,然后创建xx鼠标继承鼠标接口,创建xx键盘继承键盘接口即可。
(2)增加音响产品:首先创建音响接口,然后分别创建联想音响和宏碁音响实现类实现音响接口。然后再工厂接口中增加创建音响的方法,在联想工厂和宏碁工厂分别实现自家音响的创建。
如果文章对您有帮助,请记得点赞关注哟~
欢迎大家关注我的公众号<情系IT>,每日技术推送文章供大家学习参考。
java23种设计模式(二)抽象工厂模式的更多相关文章
- 二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式(Abstract Factory Pattern) 介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例有Message和MessageModel,Messag ...
- java23种设计模式——三、工厂模式
源码在我的github和gitee中获取 工厂模式 工厂模式介绍 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式.著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在J ...
- 【Unity与23种设计模式】抽象工厂模式(Abstract Factory)
GoF中定义: "提供一个能够建立整个类群组或有关联的对象,而不必指明它们的具体类." 意思就是 根据不同的执行环境产生不同的抽象类子类 抽象工厂模式经常在面试中会涉及到 下面的例 ...
- java23种设计模式——四、原型模式
源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式- ...
- java23种设计模式——八、组合模式
目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式--四.原型模式 java23种设计模式-- ...
- java23种设计模式——七、桥接模式
原文地址:https://www.cnblogs.com/chenssy/p/3317866.html 源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 j ...
- java23种设计模式——五、建造者模式
源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式- ...
- 桥接模式及C++实现 C++设计模式-AbstractFactory抽象工厂模式
桥接模式及C++实现 桥接模式 先说说桥接模式的定义:将抽象化(Abstraction)与实现化(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式之一 ...
- Java 设计模式之抽象工厂模式(三)
原文地址:Java 设计模式之抽象工厂模式(三) 博客地址:http://www.extlight.com 一.前言 上篇文章 <Java 设计模式之工厂模式(二)>,介绍了简单工厂模式和 ...
- JavaScript设计模式(二):工厂模式
工厂模式模式的定义与特点 工厂模式(Factory Pattern)是编程中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.在工厂模式中,我们在创建对象时不会对 ...
随机推荐
- 明明有class为什么还是报ClassNotFoundException?
描述 我们修改接口时,习惯发布一个快照版本用于测试.我们的一个服务也是发布了快照版本,然后一个jar程序要依赖这个服务,修改pom文件打包部署后,通过 java -jar 命令执行这个jar程序,然后 ...
- 金融风控100道面试题:传统银行开发转行互金top3公司并年薪40多万
知乎上有一个50万人看过的问题“为什么自学Python看不进去?”,其实原因很简单,大家缺乏能动手实战的机会. 知识要是死记硬背记在在脑海中,用不了多久就会忘记,只用依靠实战才能让知识落地. 小七这次 ...
- 算法与数据结构基础 - 递归(Recursion)
递归基础 递归(Recursion)是常见常用的算法,是DFS.分治法.回溯.二叉树遍历等方法的基础,典型的应用递归的问题有求阶乘.汉诺塔.斐波那契数列等,可视化过程. 应用递归算法一般分三步,一是定 ...
- 通过js获取tinymce4.x的值
问题的引出: 在使用过程中,用传统的js的方法判断tinymce所选textarea(下面直接称textarea)的值是会出现这样的问题的: 在已有输入内容时,首次提交的时候,依然会弹出js写的警告提 ...
- ios 把数组对象转成json字符串存起来
1第一步是我们获取数据源 一般我们都是从接口请求数据 NSArray *subColumnsArray = nil; NSDictionary *dict = [NSJSONSerialization ...
- 初学FPGA-IP核错误
[BD 5-336] This command cannot be run, as the BD-design is locked. Locked reason(s):* BD design cont ...
- go语言 链表练习
package main import "fmt" //定义节点 type Node struct { Data int Next *Node } /* * 返回第一个节点 * h ...
- SpringBoot + Jpa(Hibernate) 架构基本配置
1.基于springboot-1.4.0.RELEASE版本测试 2.springBoot + Hibernate + Druid + Mysql + servlet(jsp) 一.maven的pom ...
- Java秒杀系统优化的工程要点
这篇博客是笔者学习慕课网若鱼老师的<Java秒杀系统方案优化 高性能高并发实战>课程的学习笔记.若鱼老师授课循循善诱,讲解由浅入深,欢迎大家支持. 本文记录课程中的注意点,方便以后code ...
- pathlib模块
一.pathlib库官方定义 pathlib 是Python内置库,Python 文档给它的定义是 Object-oriented filesystem paths(面向对象的文件系统路径).path ...