当一个系统或者系统的某部分需要独立创建,组合使用的情况下。或者更深的通过配置文件配置 时,抽象工厂帮助我们完成以上需求。

有时,我们写一套属于自己提供的API,我们只需要提供自己的接口给用户,该设计模式同样适用。

使用该模式的产品具有一定的关联性。通常表现拥有同样的行为(方法);

1.使用该模式必须先有抽象产品的接口,如下:package com.vr.pro;

public interface ICat {

void eat();

}

//实现

package com.vr.pro.impl;

import com.vr.pro.ICat;

public class WhiteCat implements ICat {

@Override

public void eat() {

System.out.println("the white cat is eating!");

}

}

//实现

package com.vr.pro.impl;

import com.vr.pro.ICat;

public class BlackCat implements ICat {

@Override

public void eat() {

System.out.println("the black cat is eating!");

}

}

(IDog同理)

2.然后创建一个抽象工厂。它返回的只是产品的接口对象,如下:package com.vr.fact;

import com.vr.pro.ICat;

import com.vr.pro.IDog;

public interface IAnimalFactory {

ICat createCat();

IDog createDog();

}

3.对于实现了该工厂的类。只需要实现返回具体的产品对象。如下:package com.vr.fact.impl;

import com.vr.fact.IAnimalFactory;

import com.vr.pro.ICat;

import com.vr.pro.IDog;

import com.vr.pro.impl.BlackCat;

import com.vr.pro.impl.BlackDog;

public class BlackAnimalFactory implements IAnimalFactory {

@Override

public ICat createCat() {

return new BlackCat();

}

@Override

public IDog createDog() {

return new BlackDog();

}

}

package com.vr.fact.impl;

import com.vr.fact.IAnimalFactory;

import com.vr.pro.ICat;

import com.vr.pro.IDog;

import com.vr.pro.impl.WhiteCat;

import com.vr.pro.impl.WhiteDog;

public class WhiteAnimalFactory implements IAnimalFactory {

@Override

public ICat createCat() {

return new WhiteCat();

}

@Override

public IDog createDog() {

return new WhiteDog();

}

}

4.至此,抽象工厂设计完成。对于第三方客户端,只需要调用抽象工厂子类创建产品对象即可

IAnimalFactory whiteAnimalFactory=new WhiteAnimalFactory();

IAnimalFactory blackAnimalFactory=new BlackAnimalFactory();

ICat whiteCat=whiteAnimalFactory.createCat();

IDog whiteDog=whiteAnimalFactory.createDog();

ICat blackcatCat=blackAnimalFactory.createCat();

IDog blackDog=blackAnimalFactory.createDog();

whiteCat.eat();

whiteDog.eat();

blackcatCat.eat();

blackDog.eat();

java 抽象工厂工厂_java之抽象工厂相关推荐

  1. java web简单工厂模式_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  2. java工厂方法_Java设计模式之工厂方法模式

    2.工厂方法模式 <设计模式之禅>中用神话故事女娲造人来比概述工厂方法模式. 女娲采集黄土捏成人的形状,然后放到八卦炉中烧制,最后放置到大地上生长,工艺过程是没有错的,但是意外随时都会发生 ...

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

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

  4. java设计模式工厂模式_Java中的工厂设计模式

    java设计模式工厂模式 Welcome to the Factory Design Pattern in Java tutorial. Factory Pattern is one of the C ...

  5. java 接口 设计模式吗_JAVA接口设计模式-工厂模式

    当更换使用的IFruit子类的时候主方法没有任何的变化就可以实现子类的变更,这样的设计就是工厂设计模式. package com.gwolf.springmvc.factory; interface ...

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

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

  7. java 反射抽象_Java实现抽象工厂模式+java的反射的机制

    Java的反射机制: JAVA反射机制是就是运行的状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法 ...

  8. java设计抽象英雄类_java抽象工厂设计模式之游戏实例解析(大话java英雄联盟)...

    # 原创作品,转载请注明出处,谢谢!@杨福星 (http://blog.csdn.net/luckystar92/article/details/52176737) *前言: 最近在学习抽象工厂设计模 ...

  9. Java设计模式-工厂方法模式和抽象工厂模式

    工厂方法模式定义: 即定义一个创建对象的接口(即抽象工厂类),让其子类(具体工厂类)决定实例化哪一个类(具体产品类)."一对一"的关系 1,一抽象工厂类派生出多个具体工厂类: 2, ...

  10. Java设计模式之工厂方法模式与抽象工厂模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.前期回顾 上一篇<Java设计模式之单例模式>详细介绍了单例模式,介绍了单例模式的使用场景,优缺点,同时也写了 ...

最新文章

  1. 前端面经笔记 2021.8.28
  2. ubuntu 10.04 安装eclipse及其中文语言包
  3. Mysql 5.7 liunx 忘记密码的补救方法
  4. 中国量化投资将呈现三大发展趋势
  5. Pandoc提供二进制分发包了
  6. Java获取当前时间及String、datetime、date相互转化
  7. No project is easy, am I right?
  8. [转载] numpy.minimum
  9. 深入剖析Android音频(二)AudioSystem
  10. mysql 定位字符串的位置
  11. postfix疯狂外发垃圾邮件之分析与解决(下)
  12. 防火墙阻止软件联网方法
  13. 数据结构习题及解析二
  14. 神经网络前向传播和反向传播算法(作业4)
  15. 如果你恨一个人,就让他去接手别人的代码
  16. 【HISI系列】海思媒体处理平台架构分析
  17. Gram矩阵及其实际含义
  18. python多维字典_python定义多维字典
  19. 【网络】为什么巨型帧会影响延迟?|网络的带宽,吞吐量,时延的理解|MTU
  20. android架构师解压密码,咕泡Java架构师第三期完整版

热门文章

  1. java判断点与线与面的关系_VC++开发GIS系统(280)判断点与面的拓扑关系
  2. Linux manjaro安装搜狗输入法命令整理
  3. vscode安装Remote -WSL插件连接本地的wsl
  4. docker安装运行qq
  5. Ansible搭建hadoop3.1.3高可用集群
  6. Scala函数式编程:偏函数
  7. Scala模式匹配:类型匹配
  8. MongoDB服务启动与停止命令(Windows环境)
  9. Java中的LongAdder和AtomicLong有什么区别?
  10. led流水灯——51单片机程序