03 设计模式 抽象工厂
时间:2022-07-22
本文章向大家介绍03 设计模式 抽象工厂,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
抽象工厂
建立一个最高层级的工厂,用来生产不同产品的工厂,然后再建立一个产品规范,用来规定生产的产品需要有什么样的功能。
这样做的好处就是不需要关心创建的细节,并将一个系列的产品一起创建
产品的规范:
/*电脑产品*/
public interface ComputerProduct {
public void playGame();
public void coding();
public void watchMovie();
}
/*鼠标产品*/
public interface MouseProduct {
public void leftClick();
public void rightClick();
public void doubleClick();
public void move();
}
产品的工厂:
public interface ProductFactory {
public MouseProduct getMouse();
public ComputerProduct getComputer();
}
戴尔的产品:
/*戴尔的电脑*/
public class DellComputer implements ComputerProduct{
@Override
public void playGame() {
System.out.println("用戴尔电脑打游戏");
}
@Override
public void coding() {
System.out.println("用戴尔电脑写代码");
}
@Override
public void watchMovie() {
System.out.println("用戴尔电脑看电影");
}
}
/*戴尔的鼠标*/
public class DellMouse implements MouseProduct{
@Override
public void leftClick() {
System.out.println("左键单击戴尔鼠标");
}
@Override
public void rightClick() {
System.out.println("右键单击戴尔鼠标");
}
@Override
public void doubleClick() {
System.out.println("双击戴尔鼠标");
}
@Override
public void move() {
System.out.println("移动戴尔鼠标");
}
}
戴尔的产品工厂:
public class DellFactory implements ProductFactory {
@Override
public MouseProduct getMouse() {
return new DellMouse();
}
@Override
public ComputerProduct getComputer() {
return new DellComputer();
}
}
联想的产品:
/*联想的电脑*/
public class LenovoComputer implements ComputerProduct{
@Override
public void playGame() {
System.out.println("用联想电脑打游戏");
}
@Override
public void coding() {
System.out.println("用联想电脑写代码");
}
@Override
public void watchMovie() {
System.out.println("用联想电脑看电影");
}
}
/*联想的鼠标*/
public class LenovoMouse implements MouseProduct{
@Override
public void leftClick() {
System.out.println("左键单击联想鼠标");
}
@Override
public void rightClick() {
System.out.println("右键单击联想鼠标");
}
@Override
public void doubleClick() {
System.out.println("双击联想鼠标");
}
@Override
public void move() {
System.out.println("移动联想鼠标");
}
}
联想的产品工厂:
public class LenovoFactory implements ProductFactory {
@Override
public MouseProduct getMouse() {
return new LenovoMouse();
}
@Override
public ComputerProduct getComputer() {
return new LenovoComputer();
}
}
抽象工厂模式主要还是看代码理解
- linux学习:CentOS、Mac上SSH的设置以及SceureCRT中的文件上传下载
- 中关村成为北京“高精尖”产业发展主阵地
- jquery-barcode:js实现的条码打印
- 页面json 格式化+颜色高亮
- Python 里 and、or 的计算规则
- Python中赋值、浅拷贝与深拷贝
- git 简易使用说明
- 开发篇-MySQL分区(一)
- Establishing SSL connection without server's identity verification is not recommended. According to
- Django-认证系统
- javascript:双链表-插入排序
- javascript:二叉搜索树 实现
- 自然语言处理 语言模型介绍
- 口水先擦干!从大数据看外卖如何拯救“忙”与“宅”
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Mysql必知必会!
- 【一天一大 lee】路径总和 II (难度:中等) - Day20200926
- 【一天一大 lee】从中序与后序遍历序列构造二叉树 (难度:中等)-Day20200925
- 【一天一大 lee】填充每个节点的下一个右侧节点指针 II (难度:中等) - Day20200928
- 【一天一大 lee】 二叉搜索树中的众数 (难度:简单)-Day20200924
- 【一天一大 lee】 合并二叉树 (难度:简单)-Day20200923
- 表达量矩阵分组很复杂也可以使用limma的3大策略
- 一日一技:loguru 如何把不同的日志写入不同的文件中
- 如何迁移SSDB数据到Tendis解决方案
- 第40期:Keep Balance,平衡二叉树!
- 第38期:BST 的搜索(小白必看)
- 第39期:小白一看就会的 BST 删除!
- 基于OpenCV的区域分割、轮廓检测和阈值处理
- 基于OpenCV的实用图像处理操作
- LDAP 中 DN CN DC OU