抽象工厂模式:提供一个创建一系列的相关的或者依赖的对象的接口,无需指定它们的具体实现类,具体的时间分别在子类工厂中产生。

类似于工厂模式:隔离了具体类的生产实现,使得替换具体的工厂实现类很容易。包含有以下模块:

1.抽象产品接口:定义产品的接口,公共的暴露方法。便于实际的产品类实现。

2.具体的产品类:包含实际产品的类的逻辑处理:

3.抽象工厂接口:定义产生系列对象的接口

4.具体的工厂实现:实现抽象的接口工厂,返回具体的产品类的实现。

下面是具体的代码示例:

1.抽象的产品接口,定义了Car 和 IBreakFast

package factory.simple;/*** 抽象产品角色 交通工具接口* * @author lilin* */
public interface Car {/*** 上班函数*/void gotowork();}

package factory.abstractfactory;/*** @author lilin* */
public interface IBreakFast {/*** 吃早餐*/void eat();
}

2.定义具体的产品类的实现:

package factory.simple;/*** 具体产品角色,自行车* * @author lilin* */
public class Bike implements Car {@Overridepublic void gotowork() {System.out.println("骑自行车去上班!");}}

package factory.simple;/*** @author lilin* */
public class Bus implements Car {@Overridepublic void gotowork() {System.out.println("坐公交车去上班!");}}

/*** */
package factory.abstractfactory;/*** @author lilin* */
public class Milk implements IBreakFast {@Overridepublic void eat() {System.out.println("喝牛奶!");}}

/*** */
package factory.abstractfactory;/*** @author lilin* */
public class Orange implements IBreakFast {@Overridepublic void eat() {System.out.println("吃橘子!");}}

3.定义好抽象的工厂接口,一系列的获取实例的接口方法:

/*** */
package factory.abstractfactory;import factory.simple.Car;/*** @author lilin* */
public interface IAbstractFactory {/*** * @return*/Car getCar();/*** */IBreakFast getBreakFast();}

4.定义具体的工厂生产类,具体的产品实例返回。

/*** */
package factory.abstractfactory;import factory.simple.Bike;
import factory.simple.Car;/*** @author lilin* */
public class LowPersonFactory implements IAbstractFactory {@Overridepublic Car getCar() {return new Bike();}@Overridepublic IBreakFast getBreakFast() {return new Orange();}}

/*** */
package factory.abstractfactory;import factory.simple.Bus;
import factory.simple.Car;/*** @author lilin* */
public class HighPersonFactory implements IAbstractFactory {@Overridepublic Car getCar() {return new Bus();}@Overridepublic IBreakFast getBreakFast() {return new Milk();}
}

最后,通过testNG简单测试下,抽象工厂模式的实现:代码如下:

/*** */
package factory.abstractfactory;import org.testng.annotations.Test;import factory.simple.Car;/*** @author lilin* */
public class AbstractFactoryTest {@Testpublic void test() {IAbstractFactory factory = new LowPersonFactory();Car car = factory.getCar();IBreakFast breakFast = factory.getBreakFast();System.out.println("吃的早饭是:");breakFast.eat();System.out.println("上班交通工具是:");car.gotowork();IAbstractFactory factory2 = new HighPersonFactory();car = factory2.getCar();breakFast = factory2.getBreakFast();System.out.println("吃的早饭是:");breakFast.eat();System.out.println("上班交通工具是:");car.gotowork();}}

这样使用过程城中,只要注入抽象的工厂接口,具体的产品的产生,会在实际的子类工厂类中产生,也可以随意的添加和修改实际子类工厂类,而不需要改变既有的代码设计。

抽象工厂方法:一般常常使用于一套程序,需要多套实现的场景之下。

转载于:https://www.cnblogs.com/lilin0719/p/5313886.html

java 抽象工厂模式简单实例相关推荐

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

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

  2. 工厂模式 工厂方法模式 抽象工厂模式 简单工厂模式 工厂模式于抽象工厂的区别 设计模式

    工厂模式 定义一个用于创建对象的接口,让子类实现具体类的创建.工厂将类的实例化延迟的子类. 良好的分装性.对于具体产品,只要知道产品名称即可(类名或字符串),封闭了对产品创建的细节. 屏蔽具体产品类. ...

  3. (2)GoF设计模式之抽象工厂模式及其实例

    定义: 产品等级结构:产品等级结构即产品的继承结构,例如一个抽象类是电视机,其子类有海尔电视机.海信电视机.TCL电视机,则抽象电视机不具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而 ...

  4. java抽象工厂模式_Java 抽象工厂模式

    Java设计模式 - 抽象工厂模式 抽象工厂模式是另一个创建模式. 抽象工厂模式,也称为工厂的工厂,有一个工厂创建其他工厂. 当使用抽象工厂模式时,我们首先使用超级工厂创建工厂,然后使用创建的工厂创建 ...

  5. 20190121——不羡神仙 Java抽象工厂模式

    抽象工厂模式是一种超级工厂,用来创建其他工厂.这个工厂也被称为工厂的工厂.这种类型的设计模式属于创建模式,因此模式提供了创建对象最佳方法之一 在抽象工厂模式中,接口负责创建相关对象的工厂,而不明确指定 ...

  6. Java 抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families ...

  7. java抽象工厂模式_JAVA设计模式-抽象工厂模式

    定义 抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构. 抽象工厂模 ...

  8. Java抽象工厂模式详解

    工厂方法模式有一个缺点,他的一个工厂只能生产一种产品,那么要解决工厂类爆炸,我们就引入的产品族的概念,产品族就是把产品分类, 比如: 大众的汽车厂只能生产大众的轮子.底盘.引擎 奔驰的汽车厂只能生产奔 ...

  9. php 工厂模式运用实例,php工厂模式的实例

    * 单例模式:用于创建单一类型的唯一实例对象 * 工厂模式:用于创建多种类型的多个实例对象 //声明形状类 class Shape { //声明静态方法create,根据容器形状不同,创建不同图形类的 ...

最新文章

  1. 文巾解题 82. 删除排序链表中的重复元素 II
  2. java 日历选择天_Java程序使用Java日历将天添加到当前日期
  3. NET Core微服务之路:基于Ocelot的API网关Relay实现--RPC篇
  4. 事务的状态(状态模式)
  5. 安全密码存储–请勿做的事和Java示例
  6. 作者:徐晔(1964-),男,博士,中国科学院云计算产业技术创新与育成中心公共安全研究院研究员、院长。...
  7. 【Python】一键爬取金庸连载版/三联版/世纪新修版小说
  8. 三个基本的布尔逻辑算符是_常用布尔逻辑运算符有哪些
  9. 微信小程序:注册微信小程序
  10. 固态+机械双硬盘的双系统安装
  11. 计算机怎么看显卡内存容量,Win10系统显卡显存大小怎样查看?Win10查看显存大小的两种方法...
  12. 雷曼另类“死因”:巴菲特漏看求救短信
  13. 苹果设置播放html5视频,类似苹果官网,使用滚轴事件控制视频播放
  14. 一次精彩的皮卡车降噪试验过程
  15. 社区计算机义务维修策划书,义务维修电脑策划书.doc
  16. Wannafly挑战赛20-染色
  17. 下列不是用于制作计算机动画,计算机应用基础动画制作软件_2019答案章节答案期末答案...
  18. 圆桌共话:如何冲破数据高墙,连线“数智未来”?
  19. web期末网站设计大作业:基于HTML+CSS+JavaScript制作新能源汽车企业网站
  20. 金蝶EAS服务器安装局部补丁时,提示无法安装

热门文章

  1. 【HDU - 6441】Find Integer (费马大定理 + 奇偶数列法构造勾股定理)
  2. java 反射 代码_java反射机制学习代码
  3. php 向公众号发送消息,微信公众号之主动给用户发送消息功能
  4. IO字节缓冲流的最简单读写源码
  5. 用stack处理中缀表达式【+、-、*、/、()】
  6. C++(STL):23 ---序列式容器queue源码剖析
  7. Win10 连接 Ubuntu16.04.3(通过Xdrp连接xfce4界面)
  8. PaperNotes(7)-GANs模式坍塌/训练不稳定
  9. Pytorch(2)-tensor常用操作
  10. 推荐系统读书笔记(推荐系统实战)