Design patterns Mixture of Experts model papers English phrases Public speaking course notes Read "Dynamo, Amazon’s Highly Available Key-value Store" Read "Bigtable, A Distributed Storage System for Structured Data" Read "Streaming Systems" 3, Watermarks Read "Streaming Systems" 1&2, Streaming 101 Read "F1, a distributed SQL database that scales" Read "Zanzibar, Google’s Consistent, Global Authorization System" Read "Spanner, Google's Globally-Distributed Database" Read "Designing Data-intensive applications" 12, The Future of Data Systems IOS development with Swift Read "Designing Data-intensive applications" 10&11, Batch and Stream Processing Read "Designing Data-intensive applications" 9, Consistency and Consensus Read "Designing Data-intensive applications" 8, Distributed System Troubles Read "Designing Data-intensive applications" 7, Transactions Read "Designing Data-intensive applications" 6, Partitioning Read "Designing Data-intensive applications" 5, Replication Read "Designing Data-intensive applications" 3&4, Storage, Retrieval, Encoding Read "Designing Data-intensive applications" 1&2, Foundation of Data Systems Three cases of binary search TAMU Operating System 2 Memory Management TAMU Operating System 1 Introduction Overview in cloud computing 2 TAMU Operating System 7 Virtualization TAMU Operating System 6 File System TAMU Operating System 5 I/O and Disk Management TAMU Operating System 4 Synchronization TAMU Operating System 3 Concurrency and Threading TAMU Computer Networks 5 Data Link Layer TAMU Computer Networks 4 Network Layer TAMU Computer Networks 3 Transport Layer TAMU Computer Networks 2 Application Layer TAMU Computer Networks 1 Introduction Overview in distributed systems and cloud computing 1 A well-optimized Union-Find implementation, in Java A heap implementation supporting deletion TAMU Advanced Algorithms 3, Maximum Bandwidth Path (Dijkstra, MST, Linear) TAMU Advanced Algorithms 2, B+ tree and Segment Intersection TAMU Advanced Algorithms 1, BST, 2-3 Tree and Heap TAMU AI, Searching problems Factorization Machine and Field-aware Factorization Machine for CTR prediction TAMU Neural Network 10 Information-Theoretic Models TAMU Neural Network 9 Principal Component Analysis TAMU Neural Network 8 Neurodynamics TAMU Neural Network 7 Self-Organizing Maps TAMU Neural Network 6 Deep Learning Overview TAMU Neural Network 5 Radial-Basis Function Networks TAMU Neural Network 4 Multi-Layer Perceptrons TAMU Neural Network 3 Single-Layer Perceptrons Princeton Algorithms P1W6 Hash Tables & Symbol Table Applications Stanford ML 11 Application Example Photo OCR Stanford ML 10 Large Scale Machine Learning Stanford ML 9 Anomaly Detection and Recommender Systems Stanford ML 8 Clustering & Principal Component Analysis Princeton Algorithms P1W5 Balanced Search Trees TAMU Neural Network 2 Learning Processes TAMU Neural Network 1 Introduction Stanford ML 7 Support Vector Machine Stanford ML 6 Evaluate Algorithms Princeton Algorithms P1W4 Priority Queues and Symbol Tables Stanford ML 5 Neural Networks Learning Princeton Algorithms P1W3 Mergesort and Quicksort Stanford ML 4 Neural Networks Basics Princeton Algorithms P1W2 Stack and Queue, Basic Sorts Stanford ML 3 Classification Problems Stanford ML 2 Multivariate Regression and Normal Equation Princeton Algorithms P1W1 Union and Find Stanford ML 1 Introduction and Parameter Learning

Design patterns

2025-07-25

Books

Advantages

  • More flexible
    • Easier to add/remove/modify behavior
    • Easier to reuse behavior
  • Easier to understand
  • Less code to write/debug/maintain
  • More efficient method of creating software
  • More value per line-of-code

Strategy, proxy, decorator

Strategy

  • Strategy
    • Strategy pattern is just polymorphism.
    • “Code to interfaces, not to their implementations”
  • Proxy
    • is the delegation strategy: A strategy which uses a strategy.
    • Lets you swap implementation without the knowledge of clients
  • Decorator
    • A proxy which adds behavior.
    • Add new behaviors to objects dynamically at runtime, flexible alternative to subclassing/inheritance.
    • Decoration reuses an Object (dynamic); inheritance reuses a Class (static, compile time).
    • Separation of concerns: breaking a program into distinct features that overlap as little as possible. A concern can be considered as a feature of behavior.
    • Implement features separately, small, focused classes.
    • Avoids # class explosion.
      • 10 classes, adding 5 behaviors
        • Inheritance: 10 * 2^5
        • Decorator: 10 + 5
    • Advantages:
      • Efficient to implement behavior
      • Less code to write/maintain.
      • Separation of Concerns
      • Easier to extend
      • Testable
// Decoration
public class SynchronizedRunnable extends RunnableProxy {
    public SynchronizedRunnable(Runnable delegate) { // Takes an object
        super(delegate);
    }
    synchronized public void run() {
        this.delegate.run();
    }
}

// Inheritance
public class SynchronizedMyRunnable extends Runnable {
    public SynchronizedMyRunnable() {}
    synchronized public void run() {
        this.super();
    }
}

Path to MVC

  • Observer Pattern
    • Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
    • Observerble{attach(Observer); detach(Observer); notify()}; Observer{update()}
  • Mediator Pattern
    • A mediator serves as an intermediary that keeps objects in a group from referring to each other explicitly.
    • (Mediated object 1) -> (Mediator) <- (Mediated object 2)
  • Adaptor and Bridge
    • Special types of strategy.
    • Rely on another object to do the job(interface), which has a different interface.
  • Composite Pattern
    • Compose objects into tree structures to represent part-whole hierarchies. Clients can then treat individual objects and compositions of objects uniformly.
    • Any idea is better when made recursive – Brian Randell.
  • Flyweight
    • Use sharing to support large numbers of fine-grained objects efficiently.
    • Often implemented as a stateless Singleton.
    • Object to be worked with is passed as an argument.
    • Useful for creating extensions to existing classes.
    • Java comparator example: public interface Comparator { int compare(Object o1, Object o2)}

MVC

  • Model: Data model
    • Adaptor/Bridge strategy representing data, state and logic
  • View: UI
    • Adaptor strategy for interacting with users
  • Controller: control logic, mediator
    • Mediator between model and view

Good to always use Factory to create objects, which is more flexible and can have different creation options.


Creative Commons License
Melon blog is created by melonskin. This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
© 2016-2025. All rights reserved by melonskin. Powered by Jekyll.