Back to Skills

design-patterns

verified

BK-CI 项目设计模式实践指南,涵盖工厂模式、策略模式、观察者模式、装饰器模式、模板方法等在项目中的实际应用。当用户学习设计模式、重构代码、设计可扩展架构或理解项目设计时使用。

View on GitHub

Repository

TencentBlueKing/bk-ci
2.5kstars

ai/skills/design-patterns/SKILL.md

Last Verified

January 24, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/TencentBlueKing/bk-ci/blob/10973233baf7f2bd934986633bb59d4ed4f6503a/ai/skills/design-patterns/SKILL.md -a claude-code --skill design-patterns

Installation paths:

Claude
.claude/skills/design-patterns/
Powered by add-skill CLI

Instructions

# Skill 27: BK-CI 项目设计模式实践指南

## 概述

本指南总结了 BK-CI 项目中广泛使用的设计模式及其实际应用场景,帮助开发者理解项目架构并遵循统一的设计模式规范。

---

## 1. 工厂模式(Factory Pattern)

### 1.1 简单工厂(Simple Factory)

**应用场景**:创建特定类型的对象,通过类型参数决定实例化哪个类。

**实际案例**:

#### TaskFactory - 任务工厂

**位置**:`worker-common/src/main/kotlin/com/tencent/devops/worker/common/task/TaskFactory.kt`

**实现方式**:
```kotlin
object TaskFactory {
    private val taskMap = ConcurrentHashMap<String, KClass<out ITask>>()

    fun init() {
        // 注册内置任务
        register(LinuxScriptElement.classType, LinuxScriptTask::class)
        register(WindowsScriptElement.classType, WindowsScriptTask::class)
        register(MarketBuildAtomElement.classType, MarketAtomTask::class)
        
        // 通过反射扫描并注册插件任务
        val reflections = Reflections("com.tencent.devops.plugin.worker.task")
        val taskClasses = reflections.getSubTypesOf(ITask::class.java)
        taskClasses?.forEach { taskClazz ->
            val taskClassType = taskClazz.getAnnotation(TaskClassType::class.java)
            taskClassType?.classTypes?.forEach { classType ->
                register(classType, taskClazz.kotlin)
            }
        }
    }

    fun create(type: String): ITask {
        val clazz = taskMap[type] ?: return EmptyTask(type)
        return clazz.primaryConstructor?.call() ?: EmptyTask(type)
    }
}
```

**使用方式**:
```kotlin
// 根据 element 类型创建对应的任务实例
val task = TaskFactory.create(element.getClassType())
task.run(buildTask, param, elementId)
```

**特点**:
- 使用 Kotlin `object` 实现单例
- 支持反射扫描自动注册
- 支持优先级覆盖(`priority` 字段)
- 使用 `ConcurrentHashMap` 保证线程安全

---

#### ScmFactory - 代码库工厂

**位置**:`common-scm/src/main/kotlin/com/tencent/devops/scm/ScmFactory.kt`

**实现方式**:
```kotlin
object ScmFactory {
    private val gitApi = GitApi()
    private val svnApi = SVNApi()

    fun getScm(
        projectName: String,
        url: String,
        type: ScmType,  // CODE_SVN, CODE_GIT, CODE_TGIT, CODE_GITLAB, CODE_P4
        // ... 其他参数
    ): IScm {
        return when (type) {

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
24255 chars
design-patterns | Claude Skills