本文是自己的学习笔记,主要参考以下资料

- 大话设计模式,程杰著,清华大学出版社出版
- 马士兵教育

  • 1、抽象工厂应用场景
  • 2、具体代码
    • 2.1、设计抽象的产品簇

1、抽象工厂应用场景

工厂模式是为了方便生产单一的产品,而抽象工厂则是为了方便生产一个工厂。

一个工厂可以看成是一个产品簇。比如一个人物类。这个人物类需要配套的武器类,攻击方式类,交通工具类等等。那么这些类就可以看成是一个产品簇。

现在我们需要设计两种人物,一个是现代人,一个是魔法世界的人。

对于现代人来说,武器类是枪,攻击方式是开火,交通工具则是汽车。

对于魔法世界人来说,武器类是魔杖,攻击方式吟唱,交通工具则是扫帚。

那现在就有两个产品簇,我们就可以设计一个工厂,让这个工厂能快速方便地生产这两个产品簇。

2、具体代码

2.1、设计抽象的产品簇

首先是建立一个抽象工厂类,里面定义产品簇里需要哪些元素。

public abstract class Character{}
public abstract class Weapon{public void attack();
}
public abstract class Vehicle{public void move();
}
public abstract class AbstractFactory{public Character createCharacter();public Weapon createWeapon();public Vehicle createVehicle();
}

## 2.2、设计具体的工厂类 那接下来就是继承抽象工厂类 首先是现代人的产品簇

public class modernPeople extends Character{}
public class Gun extends Weapon{public void attack(){System.out.println("shoot");}
}
public class Car extends Vehicle{public void move(){System.out.println("drive");}
}
public class ModernFactory{public Character createCharacter(){return new ModernPeople();}public Weapon createWeapon(){return new Gun();}public Vehicle createVehicle(){return new Car();}
}

魔法世界人的产品簇

public class MagicPeople extends Character{}
public class MagicStick extends Weapon{public void attack(){System.out.println("chant");}
}
public class Broom extends Vehicle{public void move(){System.out.println("fly");}
}
public class MagicFactory{public Character createCharacter(){return new MagicPeople ();}public Weapon createWeapon(){return new MagicStick ();}public Vehicle createVehicle(){return new Broom ();}
}

那使用时就变得非常简单,关于这个人物的所有行为都是一样的写法,如果我们想换一种人,只需要将具体的工厂类替换一下就行。

// AbstractFactory factory = new MagicFactory();
AbstractFactory factory = new ModernFactory();
Character character = factory.createCharacter();
Weapon weapon = factory.createWeapon();
weapon.attack();
Vehicle vehicle = factory.createVehicle();
vehicle.move();

Java设计模式:抽象工厂相关推荐

  1. 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)

    [JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...

  2. java设计模式---抽象工厂模式

    工厂模式在项目中是常常用到的,有人说只有大项目才会用到,小项目是体会不出来.其实使用设计模式与项目的大小没有实质性的联系.设计模式是经验的总结而不是衡量项目大小的标准. 以开发项目的DAO层为例,在项 ...

  3. Java设计模式——抽象工厂模式

    文章目录 抽象工厂 概念 优缺点 优点 缺点 适用场景 代码案例 抽象工厂 使用工厂方法模式足以应付我们可能遇到的大部分业务需求. 但是当产品种类非常多时,就会出现 大量的与之对应的工厂类,这不应该是 ...

  4. 程序设计之Java设计模式(抽象工厂模式)

    原文地址:http://zhangwei-david.iteye.com/blog/2187627,该文通俗易懂,实为经典! 在设计模式一书中是这样描述抽象工厂的意图的: 提供一个创建一系列相关或相互 ...

  5. Java设计模式--抽象工厂模式

    抽象工厂模式(别名:配套) 提供一个创建一系列或相互依赖对象的接口,而无需指定它们具体的类. Abstract Factory Pattern(Another Name: Kit) Provide a ...

  6. JAVA设计模式 - 抽象工厂模式

    抽象工厂模式(Abstact Factory Pattern) , 也是创建型模式之一 . 之前主要介绍了工厂方法模式 , 抽象工厂模式和工厂方法模式稍有区别 . 工厂方法模式中工厂类生产出来的产品都 ...

  7. Java设计模式(工厂模式>抽象工厂模式和原型模式)

    Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...

  8. 简单工厂和 工厂设计模式--抽象工厂模式--Java实现

    简单工厂不是23种设计模式 工厂方法·模式 :定义一个创建对象得接口,但是让实现这个接口的类来决定实例化哪一个类,工厂方法能使得类的实例化推迟到子类中进行 工厂方法缺点: 增加了类的数量,增加复杂度 ...

  9. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

  10. 创建设计模式 - 抽象工厂设计模式

    创建设计模式 - 抽象工厂设计模式 欢迎来到java示例中的Abstract Factory Design Pattern.摘要工厂设计模式是创造模式之一.抽象工厂模式几乎类似于工厂模式,除了它更像工 ...

最新文章

  1. 量化交易python入门书籍_量化交易新手最适用的5本书
  2. 物理理论发展放缓?这是一种认知误判
  3. HP-UX B.11.31从安装到VG配置
  4. 将 Silverlight 与网页集成【转载】
  5. 11.python并发入门(part4 死锁与递归锁)
  6. Docker怎样提交镜像(把容器打成镜像)
  7. java 观察者模式示例_观察者设计模式示例
  8. 会计电算化的过程 实质上是用计算机,会计电算化的过程,实质上是用计算机()的过程。A.单一地替代手工会计操作B.单一地替代对会计进行分...
  9. javaweb和ajax使用查询出来的数据做下拉菜单_区块链浏览器实用指南篇:利用链上数据把握减半行情...
  10. Maven安装配置操作
  11. github ssl验证跳过
  12. php枚举属于什么类型,python枚举类型是什么?python枚举类型的简单介绍
  13. 利用python进行数据分析微盘_谁有有《利用Python进行数据分析》pdf 谢谢
  14. EPLAN电气设计实例入门教程pdf
  15. flask怎么创建虚拟环境_在Windows OS中创建虚拟环境并在本地运行Flask应用程序
  16. [VOA美国人物] Jackie Robinson: The First Black Player in Modern Major League
  17. ARMA模型结合PSO算法进行股票预测
  18. 生鲜配送ERP系统_对商品模块数据模型与界面设计的思考【Java 开源版】杭州生鲜配送系统_升鲜宝_SaaS全链路生鲜供应链管理系统_升鲜宝
  19. layui 新手实例教程
  20. 统计之均值中位数众数全距四分位数以及箱线图展示

热门文章

  1. android系统升级实现,疯狂升级的Android系统
  2. java中fido_一文读懂华为FIDO2指纹/3D 面容登录技术
  3. 利用评论信息的推荐综述
  4. 赵小楼《天道》《遥远的救世主》深度解析(11)芮小丹和肖亚文俩人身上值得我们学习的点。
  5. 办理物联网卡不实名会有什么后果呢
  6. 叶聪:朋友圈背后的计算机视觉技术与应用 1
  7. 解决插入word文档中的图片变得不清晰问题
  8. Linux——vi/vim文本编辑器、用户管理、关机重启的相关命令
  9. MATLAB系统仿真其三:Ornstein-Uhlenbeck(OU)噪声
  10. 支付宝app支付对接1