抽象工厂模式

定义:
   工厂模式,只有一种工厂,而抽象工厂模式,是在工厂模式的基础上再包装一层,制造一个工厂中心的抽象类,其子类创建多个不同的工厂。

案例代码:
项目目录

|—abstract-factory-pattern|—pom.xml|—src|—main|—java|—org|—peko|—design|—AnimalFactory.java|—FactoryProduct.java|—PlantFactory.java|—pattern|—abstrct_factory|—AbstractFactory.java|—animal|—Animal.java|—impl|—Cat.java|—Dog.java|—plant|—impl|—Grass.java|—Rose.java|—Plant.java|—resources|—test|—java|—org|—peko|—design|—pattren|—Test01.java

Animal.java

public interface Animal {void voice();
}

Cat.java

package org.peko.design.pattern.animal.impl;import org.peko.design.pattern.animal.Animal;public class Cat implements Animal {@Overridepublic void voice() {System.out.println("miao miao ~");}
}

Dog.java

package org.peko.design.pattern.animal.impl;import org.peko.design.pattern.animal.Animal;public class Dog implements Animal {@Overridepublic void voice() {System.out.println("wang wang !");}
}

Plant.java

public interface Plant {void grow();
}

Rose.java

package org.peko.design.pattern.plant.impl;import org.peko.design.pattern.plant.Plant;public class Rose implements Plant {@Overridepublic void grow() {System.out.println("rose");}
}

Grass.java

package org.peko.design.pattern.plant.impl;import org.peko.design.pattern.plant.Plant;public class Grass implements Plant {@Overridepublic void grow() {System.out.println("Glass");}
}

AbstractFactory.java

package org.peko.design.pattern.abstrct_factory;import org.peko.design.pattern.animal.Animal;
import org.peko.design.pattern.plant.Plant;public abstract class AbstractFactory {public abstract Animal getAnimal(String sort);public abstract Plant getPlant(String sort);
}

AnimalFactory.java

package org.peko.design;import org.apache.commons.lang3.StringUtils;
import org.peko.design.pattern.abstrct_factory.AbstractFactory;
import org.peko.design.pattern.animal.Animal;
import org.peko.design.pattern.animal.impl.Cat;
import org.peko.design.pattern.animal.impl.Dog;
import org.peko.design.pattern.plant.Plant;public class AnimalFactory extends AbstractFactory {public Animal getAnimal(String sort){if(StringUtils.isBlank(sort)){return null;}if(sort.equalsIgnoreCase("CAT")){return new Cat();}if(sort.equalsIgnoreCase("DOG")){return new Dog();}throw new RuntimeException("不存在该类型");}@Overridepublic Plant getPlant(String sort) {return null;}
}

PlantFactory.java

package org.peko.design;import org.apache.commons.lang3.StringUtils;
import org.peko.design.pattern.abstrct_factory.AbstractFactory;
import org.peko.design.pattern.animal.Animal;
import org.peko.design.pattern.plant.Plant;
import org.peko.design.pattern.plant.impl.Grass;
import org.peko.design.pattern.plant.impl.Rose;public class PlantFactory extends AbstractFactory {public Plant getPlant(String sort){if(StringUtils.isBlank(sort)){return null;}if(sort.equalsIgnoreCase("ROSE")){return new Rose();}if(sort.equalsIgnoreCase("GRASS")){return new Grass();}throw new RuntimeException("不存在该类型");}@Overridepublic Animal getAnimal(String sort) {return null;}
}

FactoryProduct.java

package org.peko.design;import org.peko.design.pattern.abstrct_factory.AbstractFactory;public class FactoryProduct {public static AbstractFactory getFactory(String sort){if(sort == null){return null;}if(sort.equalsIgnoreCase(("ANIMAL"))){return new AnimalFactory();}if(sort.equalsIgnoreCase(("PLANT"))){return new PlantFactory();}throw new RuntimeException("不存在此种工厂");}
}

Test01.java

package org.peko.design.pattren;import org.junit.jupiter.api.Test;
import org.peko.design.FactoryProduct;
import org.peko.design.pattern.abstrct_factory.AbstractFactory;public class Test01 {@Testpublic void test01(){AbstractFactory animalFactory = FactoryProduct.getFactory("animal");animalFactory.getAnimal("cat").voice();animalFactory.getAnimal("dog").voice();AbstractFactory plantFactory = FactoryProduct.getFactory("plant");plantFactory.getPlant("rose").grow();plantFactory.getPlant("grass").grow();}
}

【设计模式02】 抽象工厂模式相关推荐

  1. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  2. 设计模式三—抽象工厂模式

    设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...

  3. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  4. 设计模式复习-抽象工厂模式

    设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...

  5. 设计模式之四(抽象工厂模式第三回合)

    原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...

  6. python抽象工厂模式_Python设计模式之抽象工厂模式

    Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...

  7. 设计模式-04抽象工厂模式

    设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...

  8. C#设计模式(4)——抽象工厂模式

    C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...

  9. 设计模式 之 抽象工厂模式

    项目源码:https://gitee.com/Jacob-gitee/DesignMode 个人博客 :https://jacob.org.cn 女娲的失误 工厂模式中讲了女娲造人的故事.人是造出来了 ...

  10. 设计模式之抽象工厂模式(Abstract Factory)摘录

    面向对象系统的分析和设计实际上追求的就是两点:高内聚(Cohesion)和低耦合(Coupling). 23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.Fa ...

最新文章

  1. 阿里云主机安装Memcached扩展优化WordPress
  2. mysql主从复制gtid_详解MySQL主从复制实战 - 基于GTID的复制
  3. c++ map iterator 获取key_Java遍历Map的4种方法
  4. HDC.2019后再发力,AppGallery Connect服务新升级
  5. ubuntu添加环境变量PATH
  6. react-native拨打电话和安卓端拨打电话
  7. 区块链开发指南_区块链开发完全指南
  8. 找不到具有不变名称“System.Data.SqlClient”的ADO.NET提供程序的实体框架提供程序
  9. (转载)图文推荐给开发人员非常实用的站点
  10. 17.和优化相关的hint
  11. Plugin Alliance DS Audio THORN for Mac(电子音乐合成器插件) v1.2.0破解版
  12. 制作字幕.html教程,怎样制作视频字幕
  13. Python比较文本相似度的7种方法(详细)
  14. [FAQ10019]HDMI/MHL如何修改手机默认横竖屏显示方式
  15. rule of thumb - “经验法则”或者“拇指规则”
  16. luogu P1710 地铁涨价
  17. Qt实战项目:高精度表达式计算器Qt
  18. IT 战略规划-方法论
  19. 网安之php开发第十五天
  20. python主要是干什么用的,python到底是干什么的

热门文章

  1. layui 重置checkbox全部选中和未选中
  2. LightOJ1197 Help Hanzo —— 大区间素数筛选
  3. Angular primeng tree 组件数据解析(适用于Angular2+)
  4. jsp免费虚拟空间 jhost邀请码
  5. 鼠标事件界面转换 mouseover() 方法
  6. html在线ocr文字识别源码,如何用OCR文字识别软件把图像转换成HTML
  7. 使用 html 写一个表达爱意的网页
  8. android获取apk版本号,android 获取apk的版本信息
  9. 安卓手机电池信息的获取与显示
  10. ubuntu查看本机ip命令