Can I implement Singleton Design Pattern like this in Scheme?

Alaya

I have little knowledge about design pattern, today I learnt the Singleton design pattern, so I tried to implement it in Scheme like this

(define nil '())
(define Singleton
  (let ((instance nil))
    (lambda ()
      (if (null? instance)
          (let ((a 0))
            (define (dispatch msg)
              (cond ((eq? msg 'get)
                     (lambda () a))
                    ((eq? msg 'set)
                     (lambda (v) 
                       (begin (set! a v)
                              'ok)))))
              (set! instance dispatch)))
      instance)))
(define a (Singleton))
(define b (Singleton))
(eq? a b);;#t
((a 'set) 3)
((b 'get));;3

is my understand and implementation to this design pattern right?

uselpa

Your implementation is correct, because (eq? a b) is #t.

I would simplify it a little bit (although this is not Code Review) like so:

  1. no need to have a flag if it's the first call; just define the dispatcher once and constantly return a reference to it
  2. no need to define nil, '() will do
  3. I personally prefer to use (a 'set 3) rather than ((a 'set) 3)
  4. In this case, it's clearer to use case instead of cond

so

(define Singleton
  (let ((a 0))                     ; instance variables
    (define (get) a)
    (define (set v) (set! a v) 'ok)
    (define (dispatch msg . args)  ; dispatcher procedure
      (case msg
        ((get) (apply get args))
        ((set) (apply set args))
        (else  (error "unknown message"))))
    (lambda () dispatch)))         ; return dispatch procedure

then

(define a (Singleton))
(define b (Singleton))
(eq? a b)    ;;  #t
(a 'set 3)   ;; 'ok
(b 'get)     ;;   3

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Can I implement Singleton Design Pattern like this in Scheme?

From Dev

How to implement this using static / singleton design pattern?

From Dev

How to implement singleton design pattern in C#?

From Dev

Can't implement this design pattern in Swift?

From Dev

Can I implement quicksort efficiently with Scheme?

From Dev

how can i implement "or" in scheme in different ways

From Java

Implement the singleton pattern with a twist

From Dev

Implement the singleton pattern with a twist

From Dev

Singleton design pattern in PHP

From Dev

Singleton design pattern

From Dev

How can I implement @Singleton annotation?

From Dev

How can i tackle State Pattern with Singleton pattern in one class

From Dev

How to implement singleton pattern in subclass

From Dev

How can I implement the observer pattern in Rust?

From Dev

How can i implement the promise pattern with ReactiveCocoa?

From Dev

How can i implement the promise pattern with ReactiveCocoa?

From Dev

Understanding Java singleton Design pattern

From Java

C++ Singleton design pattern

From Dev

Using Singleton Design Pattern In Swing

From Dev

Chess game design and Singleton pattern

From Dev

Design pattern: singleton with setting capabilities

From Dev

Static constructor in Singleton design pattern

From Dev

Singleton Design Pattern in a web environment

From Dev

Multiple inheritance and singleton design pattern

From Dev

Singleton Design Pattern-Java

From Dev

How can I implement a Singleton class that can be derived from in WPF?

From Dev

How can I implement a Singleton class that can be derived from in WPF?

From Dev

How do I implement a Chaining Pattern like jQuery does?

From Dev

How to implement factory design pattern

Related Related

HotTag

Archive