博客
关于我
设计模式深入浅出--4.抽象工厂coding以及JDK中的使用
阅读量:743 次
发布时间:2019-03-17

本文共 1413 字,大约阅读时间需要 4 分钟。

抽象工厂模式在课程系统中的应用

1. 定义 & 功能

抽象工厂模式提供了一种创建一系列相关或相互依赖对象的接口,无需关心具体的实现类。

2. 适用场景

当系统需要创建一系列相关的对象(如课程系统中的视频和笔记),且这些对象之间存在密切关系或依赖时,抽象工厂模式非常有用。

3. 应用场景:课程系统

在课程系统中,不仅需要创建视频,还需要创建对应的手记(笔记)。这要求系统能够同时创建多个相关对象,且如何创建这些对象的具体实现不影响系统的整体功能。

4. 类结构设计

4.1 产品接口

定义通用的产品接口,如Video和Article,确保所有产品都具有共同的方法 signatures。

4.2 抽象工厂接口

定义一个抽象工厂接口,提供创建产品的方法。例如:

public interface CourseFactory extends Factory {    Course createCourse();    Video createVideo();    Article createNote();}

4.3 具体工厂实现

实现抽象工厂接口,针对特定课程类型创建对应的产品。例如,JavaCourseFactory:

public class JavaCourseFactory implements CourseFactory {    public Course createCourse() {        return new JavaCourse();    }    public Video createVideo() {        return new JavaVideo();    }    public Article createNote() {        return new JavaArticle();    }}

4.4 产品具体实现

实现通用接口,具体实现各产品的功能。例如,JavaVideo和JavaArticle:

public class JavaVideo implements Video {    // 实现 video 相关方法}public class JavaArticle implements Article {    // 实现 note 相关方法}

5. 测试类设计

设计一个Test类来调用工厂创建课程。例如:

public class Test {    public static void main(String[] args) {        CourseFactory factory = new JavaCourseFactory();        Course course = factory.createCourse();        System.out.println("课程已创建:" + course.getName());    }}

6. 优点

  • 解耦:客户端不依赖具体实现,简化了维护工作。
  • 扩展性:方便添加新的课程类型,只需创建新的工厂和产品实现。
  • 7. 缺点

  • 耦合性:如果需要纵向扩展(增加产品等级结构),需修改工厂接口。
  • 封闭性:如果需要横向扩展(新增工厂),需新增工厂实现。
  • 8. 适用性

    在课程系统中,抽象工厂模式非常适合,因为它允许系统方便地创建多种课程类型的组合,而无需关心每个课程的具体实现。

    转载地址:http://gybhz.baihongyu.com/

    你可能感兴趣的文章
    NN&DL4.3 Getting your matrix dimensions right
    查看>>
    NN&DL4.8 What does this have to do with the brain?
    查看>>
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
    查看>>
    No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
    查看>>
    No module named cv2
    查看>>
    No module named tensorboard.main在安装tensorboardX的时候遇到的问题
    查看>>
    No qualifying bean of type XXX found for dependency XXX.
    查看>>
    No resource identifier found for attribute 'srcCompat' in package的解决办法
    查看>>
    Node.js 文件系统的各种用法和常见场景
    查看>>
    node.js 配置首页打开页面
    查看>>
    node.js+react写的一个登录注册 demo测试
    查看>>
    Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅
    查看>>
    nodejs libararies
    查看>>
    nodejs-mime类型
    查看>>
    nodejs中Express 路由统一设置缓存的小技巧
    查看>>
    Node入门之创建第一个HelloNode
    查看>>
    NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
    查看>>
    npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
    查看>>
    npm WARN deprecated core-js@2.6.12 core-js@<3.3 is no longer maintained and not recommended for usa
    查看>>
    npm和yarn的使用对比
    查看>>