设计模式6 - 抽象工厂模式【Abstract Factory Pattern】

简介: 设计模式6 - 抽象工厂模式【Abstract Factory Pattern】

抽象工厂模式

定义:

所有形态的工厂模式中最为抽象和最具一般性的一种形态,为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

例子:

分析:

接上一节”女娲造人例子”,有了丹炉去造人了,但是问题来了,新增了一个需求,造的人需要增加性别。简单的说,就是在工厂里面,生产的每一个实体,里面都有一个获取性别的方法。

同时:

也要也要增加分为男性和女性的工场。

直接上代码:

人类模块:

/**
* 人类接口
*/
public interface Human { 
    public void laugh(); 
    public void cry(); 
    public void talk(); 
    public void sex(); 
} 
/**
* 定义为抽象类,因为子类要定义性别
*/
public abstract class AbstractYellowHuman implements Human{ 
    public void cry() { 
         System.out.println("黄色人类会哭"); 
    } 
    public void laugh() { 
         System.out.println("黄色人类会大笑,幸福呀!"); 
    } 
    public void talk() { 
         System.out.println("黄色人类会说话,一般说的都是双字节"); 
    } 
} 
/**
* 女性黄种人
*/
public class YellowFemaleHuman extends AbstractYellowHuman{ 
    public void sex() { 
         System.out.println("该黄种人的性别为女..."); 
    } 
} 
/**
* 男性黄种人
*/
public class YellowMaleHuman extends AbstractYellowHuman { 
    public void sex() { 
         System.out.println("该黄种人的性别为男...."); 
    } 
} 

工厂模块:

/**
*工厂类接口
*/
public interface HumanFactory { 
    //制造黄色人类
    public Human createYellowHuman(); 
    //制造一个白色人类
    public Human createWhiteHuman(); 
    //制造一个黑色人类
    public Human createBlackHuman(); 
} 
/**
* 抽象工厂
*/
public abstract class AbstractHumanFactory implements HumanFactory { 
 //给定一个性别人类,创建一个人类出来 专业术语是产生产品等级
protected Human createHuman(HumanEnum humanEnum) { 
 Human human = null; 
 //如果传递进来不是一个Enum中具体的一个Element的话,则不处理
 if (!humanEnum.getValue().equals("")) { 
     try { 
         //直接产生一个实例
         human = (Human)Class.forName(humanEnum.getValue()).newInstance(); 
     } catch (Exception e) { 
         //因为使用了enum,这个种异常情况不会产生了,除非你的enum有问题;
         e.printStackTrace(); 
     } 
 return human; 
 } 
} 
/**
* 男性创建工厂
*/
public class MaleHumanFactory extends AbstractHumanFactory { 
    //创建一个男性黑种人
    public Human createBlackHuman() { 
         return super.createHuman(HumanEnum.BlackMaleHuman); 
    } 
    //创建一个男性白种人
    public Human createWhiteHuman() { 
         return super.createHuman(HumanEnum.WhiteMaleHuman); 
    } 
    //创建一个男性黄种人
    public Human createYellowHuman() { 
         return super.createHuman(HumanEnum.YelloMaleHuman); 
    } 
} 
/**
* 女性创建工厂
*/
public class FemaleHumanFactory extends AbstractHumanFactory { 
    //创建一个女性黑种人
    public Human createBlackHuman() { 
          return super.createHuman(HumanEnum.BlackFemaleHuman); 
      } 
    //创建一个女性白种人
    public Human createWhiteHuman() { 
          return super.createHuman(HumanEnum.WhiteFemaleHuman); 
    } 
//创建一个女性黄种人
public Human createYellowHuman() { 
          return super.createHuman(HumanEnum.YelloFemaleHuman); 
  } 
} 

主程序,开始造人

public class NvWa { 
    public static void main(String[] args) { 
         //第一条生产线,男性生产线
         HumanFactory maleHumanFactory = new MaleHumanFactory(); 
         //第二条生产线,女性生产线
         HumanFactory femaleHumanFactory = new FemaleHumanFactory(); 
         //生产线建立完毕,开始生产人了:
         Human maleYellowHuman = maleHumanFactory.createYellowHuman(); 
         Human femaleYellowHuman = femaleHumanFactory.createYellowHuman(); 
         maleYellowHuman.cry(); 
         maleYellowHuman.laugh(); 
         femaleYellowHuman.sex(); 
         .......
 } 
} 

总结:

抽象工厂模式,还有一个非常大的有点,高内聚,低耦合,在一个较大的项目组,产品是由一批人定义开发的,但是提供其他成员访问的时候,只有工厂方法和产品的接口,也就是说只需要提供Product Interface 和Concrete Factory 就可以产生自己需要的对象和方法,Java 的高内聚低耦合的特性表现的一览无遗,


目录
相关文章
|
8月前
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
250 16
|
8月前
|
设计模式 Java 关系型数据库
【设计模式】【创建型模式】抽象工厂模式(Abstract Factory)
一、入门 什么是抽象工厂模式? 抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而不需要指定具体的类。 简单来说,抽象工厂模式是工厂方法模式的升级版,它能够创建一组相
298 14
|
10月前
|
设计模式 Java 关系型数据库
设计模式:工厂方法模式(Factory Method)
工厂方法模式是一种创建型设计模式,通过将对象的创建延迟到子类实现解耦。其核心是抽象工厂声明工厂方法返回抽象产品,具体工厂重写该方法返回具体产品实例。适用于动态扩展产品类型、复杂创建逻辑和框架设计等场景,如日志记录器、数据库连接池等。优点包括符合开闭原则、解耦客户端与具体产品;缺点是可能增加类数量和复杂度。典型应用如Java集合框架、Spring BeanFactory等。
|
10月前
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
|
12月前
|
设计模式
「全网最细 + 实战源码案例」设计模式——抽象工厂模式
抽象工厂模式是一种创建型设计模式,提供接口用于创建一系列相关或依赖的对象,无需指定具体类。它解决了产品族问题,管理和创建一组相关产品。结构上包括抽象工厂、具体工厂、抽象产品和具体产品。适用于创建相关对象、产品族固定但种类变化的场景。优点是分离接口与实现、管理产品族方便且扩展性好;缺点是产品族扩展困难且代码复杂度增加。通过配置文件和反射机制可进一步改进,使系统更灵活易扩展。
275 17
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
8月前
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
247 0
|
8月前
|
设计模式 监控 Java
并发设计模式实战系列(1):半同步/半异步模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第一章半同步/半异步(Half-Sync/Half-Async)模式,废话不多说直接开始~
238 0
|
8月前
|
设计模式 安全 Java
并发设计模式实战系列(12):不变模式(Immutable Object)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第十二章,废话不多说直接开始~
204 0

热门文章

最新文章