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)是编程中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.在工厂模式中,我们在创建对象时不会对 ...
 
随机推荐
- 剑指offer】Java版代码(完整版)
			
转自:剑指offer]Java版代码(完整版) 转自:[剑指offer] JAVA版题解(完整版)
 - kafka 主题管理
			
对于 kafka 主题(topic)的管理(增删改查),使用最多的便是kafka自带的脚本. 创建主题 kafka提供了自带的 kafka-topics 脚本,用来帮助用户创建主题(topic). b ...
 - 多场景抢红包业务引发.NETCore下使用适配器模式实现业务接口分离
			
事情的起因 我们公司现有一块业务叫做抢红包,最初的想法只是实现了一个初代版本,就是给指定的好友单发红包,随着业务的发展,发红包和抢红包的场景也越来越多,目前主要应用的场景有:单聊发红包.群聊发红包.名 ...
 - SSM相关面试题(简答)
			
1.springmvc的执行 流程: 2.mybstis的执行流程: 3.ioc和DI的理解: 4.对aop的理解: 5.spring中常见的设计模式: 6.spring中声明式事务处理的配置: ...
 - 算法与数据结构基础 - 图(Graph)
			
图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...
 - Elastic Stack 笔记(十)Elasticsearch5.6 For Hadoop
			
博客地址:http://www.moonxy.com 一.前言 ES-Hadoop 是连接快速查询和大数据分析的桥梁,它能够无间隙的在 Hadoop 和 ElasticSearch 上移动数据.ES ...
 - SpringCloud(五)Zuul网关与分布式配置中心
			
在 Spring Cloud 微服务系统中,一种常见的负载均衡方式是,客户端的请求首先经过负载均衡(Ngnix),再到达服务网关(Zuul 集群),然后再到具体的服务.服务统一注册到高可用的服务注册中 ...
 - 基于 HTML5 WebGL 的医疗物流系统
			
前言 物联网( IoT ),简单的理解就是物体之间通过互联网进行链接.世界上的万事万物,都可以通过数据的改变进行智能化管理.ioT 的兴起在医疗行业中具有拯救生命的潜在作用.不断的收集用户信息并且实时 ...
 - Android的显示意图和隐式意图总结
			
显示意图 简而言之: 通过指定特定Activity的包名和类名开启Activity 应用场景: 一般应用于本App内的activity间的跳转. XML配置信息: AndroidManifest.xm ...
 - [scikit-learn] 特征二值化
			
1.首先造一个测试数据集 #coding:utf-8 import numpy import pandas as pd from sklearn.preprocessing import OneHot ...