Java设计模式-抽象工厂模式Abstract Factory

简介: Java设计模式-抽象工厂模式Abstract Factory

文章目录

简介

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

主要解决:主要解决接口选择的问题。

何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。

如何解决:在一个产品族里面,定义多个产品。

关键代码:在一个工厂里聚合多个同类产品。


抽象工厂模式

具体的UML图如下:

884bb4e087994f86a945452df883eb56.png

接口类computer

/**

* 创建电脑的接口

*/

public interface Computer {

   //生产电脑

   void build();

   //装饰电脑

   void decorate();

   //销售电脑

   void sold();

}

抽象dell电脑工厂类

public abstract class AbstractDellFactory implements Computer{

   @Override

   public void build() {

       System.out.println("生产Dell电脑");

   }

   @Override

   public void decorate() {

       System.out.println("装饰Dell电脑");

   }

   @Override

   public void sold() {

       System.out.println("销售Dell电脑");

   }

}

抽象联想电脑工厂类

public abstract class AbstrctLenoFactory implements Computer{

   @Override

   public void build() {

       System.out.println("生产联想电脑");

   }

   @Override

   public void decorate() {

       System.out.println("装饰联想电脑");

   }

   @Override

   public void sold() {

       System.out.println("销售联想电脑");

   }

}

抽象华为电脑工厂类

public abstract class AbstractHuaweiFactory implements Computer{

   @Override

   public void build() {

       System.out.println("生产Huawei电脑");

   }

   @Override

   public void decorate() {

       System.out.println("装饰Huawei电脑");

   }

   @Override

   public void sold() {

       System.out.println("销售Huawei电脑");

   }

}

Dell具体类

/**

* dell

*/

public class DellInspironComputer extends AbstractDellFactory {

   public void build() {

       System.out.println("生产DellInspiron电脑");

   }

}

/**

* dell G游戏本

*/

public class DellGComputer extends AbstractDellFactory {

   public void build() {

       System.out.println("生产DellG电脑");

   }

}

联想和华为实现类就不列举了。

电脑工厂类

/**

* 电脑工厂类

*/

public interface ComputerFactory  {

   //制造dell电脑

   Computer createDellComputer();

   //制造华为电脑

   Computer createHuaweiComputer();

   //制造联想电脑

   Computer createLenoComputer();

}

抽象电脑工厂类

/**

* 抽象工厂进行创建具体的类

*/

public abstract class AbstractComputerFactory implements ComputerFactory{

   /*

    * 使用抽象工厂进行创建一个具体的电脑实例

    */

   protected Computer createComputer(ComputerEnum computerEnum) {

       Computer computer = null;

       //如果传递进来不是一个Enum中具体的一个Element的话,则不处理

       if (!computerEnum.getComputername().equals("")) {

           try {

               //直接产生一个实例

               computer = (Computer)

                       Class.forName(computerEnum.getComputername()).newInstance();

           } catch (Exception e) {

               e.printStackTrace();

           }

       }

       return computer;

   }

}

枚举类

/**

* 枚举类进行列出所有具体的实例

*/

public enum ComputerEnum {

   DELLG("bulid.abstractfactory.DellGComputer"),

   DELLINSPIR("bulid.abstractfactory.DellInspironComputer"),

   HUAWEIPRO("bulid.abstractfactory.HuaweiProComputer"),

   HUAWEIMATEE("bulid.abstractfactory.HuaweiMateComputer"),

   LENOR7("bulid.abstractfactory.LenovoR7Computer"),

   LENOR9("bulid.abstractfactory.LenovoR9Computer");

   private String computername;

   ComputerEnum(String computername) {

       this.computername = computername;

   }

   public String getComputername() {

       return computername;

   }

}

java中的抽象类


9ff4845110e94e86a391ea7cdcb3caa1.png

总结

工厂模式符合面向对象设计的开闭原则,抽象工厂模式,还有一个非常大的有点,高内聚,低耦合

相关文章
|
2月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
2月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
40 4
|
3月前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
57 0
[Java]23种设计模式
|
2月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
8天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
10天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
10天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。
|
11天前
|
安全 Java 编译器
深入理解Java中synchronized三种使用方式:助您写出线程安全的代码
`synchronized` 是 Java 中的关键字,用于实现线程同步,确保多个线程互斥访问共享资源。它通过内置的监视器锁机制,防止多个线程同时执行被 `synchronized` 修饰的方法或代码块。`synchronized` 可以修饰非静态方法、静态方法和代码块,分别锁定实例对象、类对象或指定的对象。其底层原理基于 JVM 的指令和对象的监视器,JDK 1.6 后引入了偏向锁、轻量级锁等优化措施,提高了性能。
33 3
|
11天前
|
存储 安全 Java
Java多线程编程秘籍:各种方案一网打尽,不要错过!
Java 中实现多线程的方式主要有四种:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口和使用线程池。每种方式各有优缺点,适用于不同的场景。继承 Thread 类最简单,实现 Runnable 接口更灵活,Callable 接口支持返回结果,线程池则便于管理和复用线程。实际应用中可根据需求选择合适的方式。此外,还介绍了多线程相关的常见面试问题及答案,涵盖线程概念、线程安全、线程池等知识点。
92 2