avatar
文章
51
标签
70
分类
8
home
archives
tags
categories
about
Elian's blog page
home
archives
tags
categories
about

Elian's blog page

251114 thinking mediator
发表于2025-11-14|Design Pattern
1. 什么是中介者模式?中介者模式(Mediator Pattern)通过引入一个“中介者”对象来封装对象之间的交互,使多个对象不需要显式引用彼此,改为只与中介者通信。它将协作编排从同事对象中抽离出来,降低耦合并集中管理交互规则。 2....
251112 thinking binary constraint matching
发表于2025-11-12|data structure & algorithm
1. 抽象受到力扣1. 两数之和以及类似问题的启发,抽象出如下模板: 给定一个整数数组arr,令$x,y \in arr$,且$x,y$不能是同一个元素。若$f(x,y)=K$,给定$f,K$,求所有满足条件的${x,y}$。 伪代码如下 123456789101112131415//input : arr, f, K//output : all pairs of x, y in arr such that f(x, y) = K//assumption : f(x,y)=k <=> g(x)=h(y), and g,h both are well-defined functionsalgorithm binary-constraint-matching(arr, K, f): hash table := empty hash table, value -> list ans := empty set for each x in arr; do if h(x) in hash table; then ...
251108 thinking iterator
发表于2025-11-08|Design Pattern
1. 什么是迭代器模式迭代器模式(Iterator Pattern)是一种行为设计模式,它提供一种方法来顺序访问一个聚合对象(Aggregate Object)中的各个元素,而又无需暴露该对象的内部表示。 无论操作的是一个数组、一个链表、一棵树还是一个哈希表,都可以用同样的客户端方式去遍历它(比如一个 for-each 循环),而不关心底层的具体的遍历方式是dfs还是bf或者其他。 它将遍历的逻辑从聚合对象中分离出来,放入一个单独的迭代器对象中。这样,容器只负责存储数据,而迭代器负责遍历数据。 2. 为什么需要迭代器模式?如果没有迭代器模式,客户端代码需要知道聚合对象的内部结构才能进行遍历。例如,遍历数组需要用索引,遍历链表需要用 next 指针。这会导致客户端与数据结构紧密耦合。 客户端无需关心容器的内部实现(是 slice、map 还是 linked...
251108 thinking command
发表于2025-11-08|Design Pattern
1. 什么是命令模式命令模式是一种行为设计模式,它将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。简单来说,就是将请求的发送者和请求的具体操作完全解耦。 2. 为什么需要命令模式?命令模式的核心价值在于解耦。如果没有命令模式,调用者(比如一个按钮 Button)需要直接引用并调用一个具体的操作(比如一个文档 Document 的 save() 方法)。这会导致 Button 和 Document 紧密耦合,Button 无法被复用到其他操作上。 通过引入命令对象,调用者不再关心命令的接收者是谁,也不关心操作如何执行。它只知道“我需要执行这个命令”。 这样的话,调用者和接收者之间没有任何直接引用,各自可以独立变化。而且添加新的命令非常容易,只需创建新的具体命令类,而无需修改现有代码,符合开放/封闭原则。 3. 命令模式的实现 (Go)中间件: 1234567891011121314151617181920212223242526272829303132333435// Command 接口定义了一个执行操作的方法type Command...
251108 thinking chain-of-responsibility
发表于2025-11-08|Design Pattern
1. 什么是责任链模式?责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它将请求的发送者和接收者解耦,将这些处理者连成一条链。链上的每个处理者都有一个成员变量来保存对于下一处理者的引用。除了处理请求外,处理者还负责沿着链传递请求。请求会在链上移动,直至所有处理者都有机会对其进行处理,或是中途退出。 2. 为什么需要责任链模式?当处理一个请求、但处理步骤有多种、且依赖于不同的条件时,一种最直观的写法可能是一个巨大的 if-else 结构: 1234567891011func handle(request *Request) { if conditionA(request) { // 处理 A } else if conditionB(request) { // 处理 B } else if conditionC(request) { // 处理 C } else { //...
251101 record closest-equal-element-queries
发表于2025-11-01|record
题目 12345678910111213141516171819vector<int> solveQueries(vector<int>& nums, vector<int>& queries) { map<int,vector<int>>mp; for(int i=0;i<nums.size();++i){ mp[nums[i]].push_back(i); } int n = queries.size(); vector<int>ans(n,-1); for(int j=0;j<n;++j){ int q = queries[j]; auto & vec = mp[nums[q]]; if(vec.size()==1){ ...
251031 thinking proxy
发表于2025-10-31|Design Pattern
1. 什么是代理模式代理模式是一种结构型设计模式,它通过引入一个代理对象来控制对另一个对象的访问。代理对象可以在客户端和目标对象之间添加额外的功能,如延迟加载、访问控制、日志记录等。 2. 为什么需要代理模式代理模式的核心价值在于在不改变原始对象(目标对象)代码的前提下,增加额外的控制和功能。它像一个中介,隔离了客户端和真实对象,并在中间“做手脚”。 3. 代理模式的实现 (Go)我们用 Go 实现一个保护代理的例子。假设我们有一个 Web 服务器,希望通过一个 Nginx 代理来限制用户的访问速率。 客户端、代理和真实服务都应遵循同一个接口,这样代理才能“伪装”成真实服务。 1234// Server 是代理和真实服务器的通用接口type Server interface { HandleRequest(url, method string) (int, string)} 创建真实服务 (RealSubject) 这是我们真正要保护的后端应用。 123456789101112// Application 是我们的后端真实服务type...
251031 thinking flyweight
发表于2025-10-31|Design Pattern
1. 什么是享元模式享元模式是一种结构型设计模式,它通过共享相同状态的对象来减少内存占用和提高性能。 2. 为什么需要享元模式我们用一个“在地图上种树”的例子来理解。 2.1. 问题:内存爆炸假设要在地图上种 100 万棵树。每棵树都有: 坐标:每棵树都不同。 类型信息:如名称(松树)、颜色(绿色)、纹理图片等。类型是有限的,比如只有几种。 如果为每棵树都创建一个包含所有信息的对象,Texture(纹理图片)这份可能很大的数据会被重复存储 100 万次,导致内存爆炸。 1234567// 传统方式:每个对象都包含所有数据type Tree struct { X, Y int Name string Color string Texture []byte // 假设这份数据很大} 该如何解决这个问题? 2.2. 方案:享元模式享元模式的核心是分离并共享相似对象中的共同部分,以减少内存占用。 我们将对象的状态分为两种: **内部状态 (Intrinsic State)**:可共享、不随环境改变的部分。在例子中是 Name,...
251025 thinking facade
发表于2025-10-25|Design Pattern
1. 什么是外观模式外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。 2. 为什么需要外观模式外观模式的主要目的是简化复杂系统的使用。它通过提供一个简单的接口,隐藏系统的复杂性,使客户端代码更易于理解和使用。 3. 外观模式的实现(go)以计算机开机为例,展示外观模式的实现。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748// 子系统:CPUtype CPU struct{}func (c *CPU) Start() { fmt.Println("CPU: start") }func (c *CPU) Shutdown() { fmt.Println("CPU: shutdown") }// 子系统:内存type Memory struct{}func (m *Memory) LoadOS()...
251018 thinking decorator
发表于2025-10-25|Design Pattern
1. 什么是装饰器模式装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许你在不改变原有对象结构的情况下,动态地给对象添加新的功能。 2. 为什么需要装饰器模式想象一下去咖啡店点单的场景: 一杯基础款咖啡(比如美式)。 各种调料(比如牛奶、糖、巧克力酱等)。 你可以选择只喝纯的美式,也可以要求加奶,再加糖。 如果我们用继承来实现“咖啡+调料”的功能,会发生什么? 我们可能需要创建CoffeeWithMilk CoffeeWithSugar...
123…6
avatar
Eliano
文章
51
标签
70
分类
8
Follow Me
最新文章
260326 thinking kmp2026-03-26
251122 tool Nginx2025-11-29
251122 thinking visitor2025-11-29
251122 tool swagger2025-11-22
251122 thinking template2025-11-22
分类
  • 2024-xv6-labs2
  • Base Knowledge2
  • Design Pattern21
  • Qt1
  • cache1
  • data structure & algorithm15
  • record3
  • tool6
标签
Nginx tool Flyweight Pattern reading note shell Factory Method Abstract Factory Strategy Pattern heap Design Pattern Prototype Pattern Observer Pattern Monotonic Stack Command Pattern Template Method Pattern go Facade Pattern data structure & algorithm binary search mathematics state compression Interface Oriented Programming Iterator Pattern 0-1 bag dp Visitor Pattern Proxy Pattern Record sieve of Eratosthenes linux difference rollback Adapter Pattern Projects string Builder Pattern kmp Trie javascript docker slider window
归档
  • 三月 2026 1
  • 十一月 2025 15
  • 十月 2025 16
  • 九月 2025 6
  • 八月 2025 9
  • 七月 2025 4
网站信息
文章数目 :
51
本站总字数 :
61.8k
最后更新时间 :
©2025 - 2026 By Eliano
框架 Hexo 7.3.0|主题 Butterfly 5.3.5
All Rights Reserved.