Module Pattern is an actively used design pattern.

?Years Old
  • Module Pattern ranks in the top 50% of entities I track
  • the Module Pattern wikipedia page
  • I have 14 facts about Module Pattern. what would you like to know? email me and let me know how I can help.

Languages with Module Pattern include csharp, fortran, java, julia, ocaml, racket

Example from csharp:

// In C#, namespaces are the semi-equivalent of Java's packages.
namespace com.test
{
   class Test {}
}

Example from fortran:

module constants  
implicit none 

   real, parameter :: pi = 3.1415926536  
   real, parameter :: e = 2.7182818285 
   
contains      
   subroutine show_consts()          
      print*, "Pi = ", pi          
      print*,  "e = ", e     
   end subroutine show_consts 
   
end module constants 


program module_example     
use constants      
implicit none     

   real :: x, ePowerx, area, radius 
   x = 2.0
   radius = 7.0
   ePowerx = e ** x
   area = pi * radius**2     
   
   call show_consts() 
   
   print*, "e raised to the power of 2.0 = ", ePowerx
   print*, "Area of a circle with radius 7.0 = ", area  
   
end program module_exampl

Example from java:

// Package = directory. Java classes can be grouped together in packages. A package name is the same as the directory (folder) name which contains the .java files. You declare packages when you define your Java program, and you name the packages you want to use from other libraries in an import statement.
// The first statement, other than comments, in a Java source file, must be the package declaration.
// Following the optional package declaration, you can have import statements, which allow you to specify classes from other packages that can be referenced without qualifying them with their package.
// This source file must be Drawing.java in the illustration directory.
package illustration;
import java.awt.*;
public class Drawing {
 // ...
}

Example from julia:

module MyModule
using Lib

using BigLib: thing1, thing2

import Base.show

export MyType, foo

struct MyType
    x
end

bar(x) = 2x
foo(a::MyType) = bar(a.x) + 1

show(io::IO, a::MyType) = print(io, "MyType $(a.x)")
end

Example from ocaml:

(* In OCaml, every piece of code is wrapped into a module. *)
(* amodule.ml *)
let hello () = print_endline "Hello"
(* bmodule.ml *)
Amodule.hello ()

Example from racket:

(module nest racket
   (provide (for-syntax meta-eggs)
            (for-meta 1 meta-chicks)
            num-eggs)
   (define-for-syntax meta-eggs 2)
   (define-for-syntax meta-chicks 3)
   (define num-eggs 2))

Last updated September 6th, 2019