Design Patterns in VB.NET

Patterns (with VB idioms) Factory Method, Abstract Factory, Builder (fluent Return Me), Singleton (Lazy(Of T) or a DI singleton), Prototype (MemberwiseClone)

Adapter, Decorator (wrap an interface implementation), Facade, Proxy (lazy/remote/caching), Composite (tree of IComponent), Bridge, Flyweight

Strategy (Func(Of) or interfaces), Observer (events, IObservable), Command (ICommand, undo stacks), Template Method (MustOverride steps), State (state classes), Chain of Responsibility (middleware/handlers), Mediator, Iterator (Iterator Function), Visitor, Memento, Specification

Repository, Unit of Work, Service Layer, DTO, Mapper (AutoMapper / Mapster or manual), Dependency Injection, Options, Result type, CQRS, Domain Events, Outbox

' Decorator: add caching to a repository without changing it
Public Class CachedProductRepository
    Implements IProductRepository
    Private ReadOnly _inner As IProductRepository
    Private ReadOnly _cache As Microsoft.Extensions.Caching.Memory.IMemoryCache
    Public Sub New(inner As IProductRepository, cache As Microsoft.Extensions.Caching.Memory.IMemoryCache)
        _inner = inner : _cache = cache
    End Sub
    Public Function GetByIdAsync(id As Integer) As Task(Of Product) Implements IProductRepository.GetByIdAsync
        Return _cache.GetOrCreateAsync($"product:{id}",
            Function(entry)
                entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
                Return _inner.GetByIdAsync(id)
            End Function)
    End Function
End Class

' State pattern
Public MustInherit Class OrderState
    Public MustOverride Function [Next](order As Order) As OrderState
    Public Overridable Function CanCancel() As Boolean
        Return False
    End Function
End Class
Public Class PendingState
    Inherits OrderState
    Public Overrides Function [Next](order As Order) As OrderState
        Return New ShippedState()
    End Function
    Public
…