<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Takaaki Teshima</title>
    <description>The latest articles on DEV Community by Takaaki Teshima (@takaakit).</description>
    <link>https://dev.to/takaakit</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F537650%2Ff3d3bdb4-de99-4c4a-91bc-c567a3bf82db.png</url>
      <title>DEV Community: Takaaki Teshima</title>
      <link>https://dev.to/takaakit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/takaakit"/>
    <language>en</language>
    <item>
      <title>UML diagram for GoF design pattern examples in Crystal</title>
      <dc:creator>Takaaki Teshima</dc:creator>
      <pubDate>Tue, 01 Jun 2021 00:22:00 +0000</pubDate>
      <link>https://dev.to/takaakit/uml-diagram-for-gof-design-pattern-examples-in-crystal-4j0f</link>
      <guid>https://dev.to/takaakit/uml-diagram-for-gof-design-pattern-examples-in-crystal-4j0f</guid>
      <description>&lt;p&gt;This post lists UML diagrams of GoF design pattern examples written in Crystal.  The UML diagrams are displayed using &lt;em&gt;Diagram Map&lt;/em&gt;. If you want to know about &lt;em&gt;Diagram Map&lt;/em&gt;, see &lt;a href="https://dev.to/takaakit/diagram-map-tracing-uml-sysml-elements-across-diagrams-49i7"&gt;this post&lt;/a&gt;. Also, you can get UML model data and Crystal code of the examples from &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal" rel="noopener noreferrer"&gt;here&lt;/a&gt;.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Table of Contents
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Behavioral Patterns

&lt;ul&gt;
&lt;li&gt;Chain of Responsibility&lt;/li&gt;
&lt;li&gt;Command&lt;/li&gt;
&lt;li&gt;Interpreter&lt;/li&gt;
&lt;li&gt;Iterator&lt;/li&gt;
&lt;li&gt;Mediator&lt;/li&gt;
&lt;li&gt;Memento&lt;/li&gt;
&lt;li&gt;Observer&lt;/li&gt;
&lt;li&gt;State&lt;/li&gt;
&lt;li&gt;Strategy&lt;/li&gt;
&lt;li&gt;Template Method&lt;/li&gt;
&lt;li&gt;Visitor&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Creational Patterns

&lt;ul&gt;
&lt;li&gt;Abstract Factory&lt;/li&gt;
&lt;li&gt;Builder&lt;/li&gt;
&lt;li&gt;Factory Method&lt;/li&gt;
&lt;li&gt;Prototype&lt;/li&gt;
&lt;li&gt;Singleton&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Structural Patterns

&lt;ul&gt;
&lt;li&gt;Adapter&lt;/li&gt;
&lt;li&gt;Bridge&lt;/li&gt;
&lt;li&gt;Composite&lt;/li&gt;
&lt;li&gt;Decorator&lt;/li&gt;
&lt;li&gt;Facade&lt;/li&gt;
&lt;li&gt;Flyweight&lt;/li&gt;
&lt;li&gt;Proxy&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;References&lt;/li&gt;

&lt;li&gt;Links&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Chain of Responsibility &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
A trouble is turned around among supporters, and the trouble will be handled by the supporter who can handle it. There are four types of supporters below:

&lt;ul&gt;
&lt;li&gt;LazySupporter doesn't handle any trouble&lt;/li&gt;
&lt;li&gt;MoodySupporter handles odd ID troubles&lt;/li&gt;
&lt;li&gt;SpecialSupporter handles a trouble of the target ID.&lt;/li&gt;
&lt;li&gt;LimitedSupporter handles troubles below the limit ID.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fchain_of_responsibility%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fchain_of_responsibility%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/behavioral_patterns/chain_of_responsibility" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/amhx10rv/1//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/behavioral_patterns/chain_of_responsibility/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Command &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Encapsulate a request as an object, thereby letting you parametrize clients with different requests, queue or log requests, and support undoable operations (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Simple drawing application:

&lt;ul&gt;
&lt;li&gt;Draw a path with points by dragging the mouse.&lt;/li&gt;
&lt;li&gt;Revert to one previous drawing by pressing the Undo button.&lt;/li&gt;
&lt;li&gt;Erase all drawing by pressing the Clear button.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fcommand%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fcommand%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/behavioral_patterns/command" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/xptu8kf4/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/behavioral_patterns/command/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Interpreter &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
An interpreter for mini language to operate radio controlled car. It parses the following syntax composed of "forward", "left", "right", and "repeat" commands:&lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;program&amp;gt;      ::= program &amp;lt;command list&amp;gt;
&amp;lt;command list&amp;gt; ::= &amp;lt;command&amp;gt;* end
&amp;lt;command&amp;gt;      ::= &amp;lt;repeat&amp;gt; | &amp;lt;action&amp;gt;
&amp;lt;repeat&amp;gt;       ::= repeat &amp;lt;number&amp;gt; &amp;lt;command list&amp;gt;
&amp;lt;action&amp;gt;       ::= forward | right | left
&amp;lt;number&amp;gt;       ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Finterpreter%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Finterpreter%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/behavioral_patterns/interpreter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/gch7rdtz/4//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/behavioral_patterns/interpreter/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Iterator &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Add books in a bookshelf and display the names of the book in turn.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fiterator%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fiterator%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/behavioral_patterns/iterator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/z7jm0Lwa/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/behavioral_patterns/iterator/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Mediator &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Show a login dialog for entering a username and password. The dialog has the following elements:

&lt;ul&gt;
&lt;li&gt;"Guest" and "Login" radio buttons&lt;/li&gt;
&lt;li&gt;"Username" and "Password" text fields&lt;/li&gt;
&lt;li&gt;"OK" and "Cancel" buttons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And change the editable properties of the elements depending on the state of the radio buttons and text fields.&lt;/p&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fmediator%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fmediator%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/behavioral_patterns/mediator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/u1owxegr/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/behavioral_patterns/mediator/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Memento &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Without violating encapsulation, capture and externalize an object's internal state so that the object can be returned to this state later (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
A dice game in which money increases and decreases:

&lt;ul&gt;
&lt;li&gt;A gamer shakes a dice and the number determine the next state.&lt;/li&gt;
&lt;li&gt;If the number of dice is even, gamer's money doubles, and if it is odd, gamer's money is halved.&lt;/li&gt;
&lt;li&gt;If the gamer's money is less than half of the highest amount, it returns to the highest amount.&lt;/li&gt;
&lt;li&gt;The game is repeated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fmemento%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fmemento%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/behavioral_patterns/memento" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/6m03wt18/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/behavioral_patterns/memento/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Observer &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Observers observe a Subject object holding a numerical value and display the value. The display formats are digits and bar charts.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fobserver%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fobserver%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/behavioral_patterns/observer" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/3yo76wng/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/behavioral_patterns/observer/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  State &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Allow an object to alter its behavior when its internal state changes. The object will appear to change its class (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Safe security system that the security status changes with time. When you press a button in a dialog, the message displayed will change depending on whether the time is day or night. The internal time of the dialog advances one hour for every second of real time.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fstate%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fstate%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/behavioral_patterns/state" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/29yvjctb/1//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/behavioral_patterns/state/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Strategy &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from the clients that use it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
A game of rock-scissors-paper. Two strategies are available:

&lt;ul&gt;
&lt;li&gt;Random Strategy: showing a random hand signal.&lt;/li&gt;
&lt;li&gt;Mirror Strategy: showing a hand signal from the previous opponent's hand signal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fstrategy%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fstrategy%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/behavioral_patterns/strategy" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/zq6e8sdh/1//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/behavioral_patterns/strategy/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Template Method &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define the skeleton of an algorithm in an operation, deferring some steps to client subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a character or string repeatedly 5 times.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Ftemplate_method%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Ftemplate_method%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/behavioral_patterns/template_method" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/u7n36w9v/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/behavioral_patterns/template_method/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Visitor &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Visitor visits the file system composed of files and directories, and displays a list of files/directories.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fvisitor%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fvisitor%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/behavioral_patterns/visitor" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/7zsxby8v/1//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/behavioral_patterns/visitor/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Abstract Factory &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide an interface for creating families of related or dependent objects without specifying their concrete classes (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Create a hierarchical link collection as an HTML file. It can be created in either tabular or list format.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fabstract_factory%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fabstract_factory%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/creational_patterns/abstract_factory" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/2txg3f6h/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/creational_patterns/abstract_factory/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Builder &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Separate the construction of a complex object from its representation so that the same construction process can create different representations (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Create documents in HTML format and text format. It is possible to create different documents in the same construction process.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fbuilder%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fbuilder%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/creational_patterns/builder" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/1ebxrdyh/1//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/creational_patterns/builder/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Factory Method &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
The subject is a factory to make credit cards. The Factory defines how to create an credit card, but the actual credit card is created by the CreditCardFactory. The "createProduct()" is called a Factory Method, and it is responsible for manufacturing an object.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Ffactory_method%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Ffactory_method%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/creational_patterns/factory_method" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/4tsaw0dk/5//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/creational_patterns/factory_method/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Prototype &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a string enclosed with a frame line, or drawn with an underline. The Client (Main) registers instances of the Display subclass in the Manager class. When necessary, the Manager class asks those registered instances to return a clone. The Client (Main) requires the returned clones to display.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fprototype%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fprototype%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/creational_patterns/prototype" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/251hx4mv/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/creational_patterns/prototype/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Singleton &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Ensure a class has only one instance, and provide a global point of access to it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Check whether the same instance is obtained.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fsingleton%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fsingleton%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/creational_patterns/singleton" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/b3omnwhz/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/creational_patterns/singleton/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Adapter &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display the given string as follows&lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-- Nice to meet you --
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or display it as follows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[[ Nice to meet you ]]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fadapter%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fadapter%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/structural_patterns/adapter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/6vhu5xj8/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/structural_patterns/adapter/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Bridge &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Decouple an abstraction from its implementation so that the two can vary independently (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display only one line or display the specified number of lines.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fbridge%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fbridge%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/structural_patterns/bridge" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/12xw0np3/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/structural_patterns/bridge/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Composite &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Compose objects into tree structures to represent whole-part hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Represents a file system composed of files and directories. FileSystemElement makes it possible to treat File and Directory uniformly.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fcomposite%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fcomposite%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/structural_patterns/composite" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/8ubp01fy/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/structural_patterns/composite/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Decorator &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a string with decorative frames. The frames can be combined arbitrarily.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fdecorator%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fdecorator%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/structural_patterns/decorator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/ej2w1bpk/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/structural_patterns/decorator/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Facade &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Create a simple homepage through a Facade (PageCreator). The Facade gets info from the DataLibrary and uses the info to create an HTML file.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Ffacade%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Ffacade%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/structural_patterns/facade" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/b6s8fgLx/1//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/structural_patterns/facade/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Flyweight &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Use sharing to support large numbers of fine-grained objects efficiently (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a string consisting of large characters (0-9 digits only). Large character objects are not created until they are needed. And the created objects are reused.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fflyweight%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fflyweight%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/structural_patterns/flyweight" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/czthj53a/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/structural_patterns/flyweight/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Proxy &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide a surrogate or placeholder for another object to control access to it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Print on a named printer. Setting and changing the printer name is done by Proxy (ProxyPrinter). At the time of printing, create an instance of the RealSubject (RealPrinter) for the first time.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fproxy%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-crystal-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fproxy%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal/tree/master/src/structural_patterns/proxy" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/atpv1n9k/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-crystal-design-pattern-examples/blob/master/structural_patterns/proxy/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  References &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Gamma, E. et al. Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994&lt;/li&gt;
&lt;li&gt;Hiroshi Yuki. Learning Design Patterns in Java [In Japanese Language], Softbank publishing, 2004&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Links &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/takaakit/diagram-map-tracing-uml-sysml-elements-across-diagrams-49i7"&gt;Diagram Map: tracing UML/SysML elements across diagrams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/takaakit/design-pattern-examples-in-crystal" rel="noopener noreferrer"&gt;Design Pattern Examples in Crystal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>uml</category>
      <category>gof</category>
      <category>designpatterns</category>
      <category>crystal</category>
    </item>
    <item>
      <title>UML diagram for GoF design pattern examples in Java</title>
      <dc:creator>Takaaki Teshima</dc:creator>
      <pubDate>Mon, 24 May 2021 09:56:20 +0000</pubDate>
      <link>https://dev.to/takaakit/uml-diagram-for-gof-design-pattern-examples-in-java-5fe5</link>
      <guid>https://dev.to/takaakit/uml-diagram-for-gof-design-pattern-examples-in-java-5fe5</guid>
      <description>&lt;p&gt;This post lists UML diagrams of GoF design pattern examples written in Java.  The UML diagrams are displayed using &lt;em&gt;Diagram Map&lt;/em&gt;. If you want to know about &lt;em&gt;Diagram Map&lt;/em&gt;, see &lt;a href="https://dev.to/takaakit/diagram-map-tracing-uml-sysml-elements-across-diagrams-49i7"&gt;this post&lt;/a&gt;. Also, you can get UML model data and Java code of the examples from &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java" rel="noopener noreferrer"&gt;here&lt;/a&gt;.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Table of Contents
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Behavioral Patterns

&lt;ul&gt;
&lt;li&gt;Chain of Responsibility&lt;/li&gt;
&lt;li&gt;Command&lt;/li&gt;
&lt;li&gt;Interpreter&lt;/li&gt;
&lt;li&gt;Iterator&lt;/li&gt;
&lt;li&gt;Mediator&lt;/li&gt;
&lt;li&gt;Memento&lt;/li&gt;
&lt;li&gt;Observer&lt;/li&gt;
&lt;li&gt;State&lt;/li&gt;
&lt;li&gt;Strategy&lt;/li&gt;
&lt;li&gt;Template Method&lt;/li&gt;
&lt;li&gt;Visitor&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Creational Patterns

&lt;ul&gt;
&lt;li&gt;Abstract Factory&lt;/li&gt;
&lt;li&gt;Builder&lt;/li&gt;
&lt;li&gt;Factory Method&lt;/li&gt;
&lt;li&gt;Prototype&lt;/li&gt;
&lt;li&gt;Singleton&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Structural Patterns

&lt;ul&gt;
&lt;li&gt;Adapter&lt;/li&gt;
&lt;li&gt;Bridge&lt;/li&gt;
&lt;li&gt;Composite&lt;/li&gt;
&lt;li&gt;Decorator&lt;/li&gt;
&lt;li&gt;Facade&lt;/li&gt;
&lt;li&gt;Flyweight&lt;/li&gt;
&lt;li&gt;Proxy&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;References&lt;/li&gt;

&lt;li&gt;Links&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Chain of Responsibility &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
A trouble is turned around among supporters, and the trouble will be handled by the supporter who can handle it. There are four types of supporters below:

&lt;ul&gt;
&lt;li&gt;LazySupporter doesn't handle any trouble&lt;/li&gt;
&lt;li&gt;MoodySupporter handles odd ID troubles&lt;/li&gt;
&lt;li&gt;SpecialSupporter handles a trouble of the target ID.&lt;/li&gt;
&lt;li&gt;LimitedSupporter handles troubles below the limit ID.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fchainofresponsibility%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fchainofresponsibility%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/behavioralpatterns/chainofresponsibility" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/76k93wLz/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/behavioralpatterns/chainofresponsibility/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Command &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Encapsulate a request as an object, thereby letting you parametrize clients with different requests, queue or log requests, and support undoable operations (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Simple drawing application:

&lt;ul&gt;
&lt;li&gt;Draw a path with points by dragging the mouse.&lt;/li&gt;
&lt;li&gt;Revert to one previous drawing by pressing the Undo button.&lt;/li&gt;
&lt;li&gt;Erase all drawing by pressing the Clear button.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fcommand%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fcommand%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/behavioralpatterns/command" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/bvawdhf8/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/behavioralpatterns/command/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Interpreter &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
An interpreter for mini language to operate radio controlled car. It parses the following syntax composed of "forward", "left", "right", and "repeat" commands:&lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;program&amp;gt;      ::= program &amp;lt;command list&amp;gt;
&amp;lt;command list&amp;gt; ::= &amp;lt;command&amp;gt;* end
&amp;lt;command&amp;gt;      ::= &amp;lt;repeat&amp;gt; | &amp;lt;action&amp;gt;
&amp;lt;repeat&amp;gt;       ::= repeat &amp;lt;number&amp;gt; &amp;lt;command list&amp;gt;
&amp;lt;action&amp;gt;       ::= forward | right | left
&amp;lt;number&amp;gt;       ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Finterpreter%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Finterpreter%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/behavioralpatterns/interpreter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/ud7f412s/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/behavioralpatterns/interpreter/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Iterator &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Add books in a bookshelf and display the names of the book in turn.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fiterator%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fiterator%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/behavioralpatterns/iterator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/ruy2abwm/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/behavioralpatterns/iterator/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Mediator &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Show a login dialog for entering a username and password. The dialog has the following elements:

&lt;ul&gt;
&lt;li&gt;"Guest" and "Login" radio buttons&lt;/li&gt;
&lt;li&gt;"Username" and "Password" text fields&lt;/li&gt;
&lt;li&gt;"OK" and "Cancel" buttons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And change the editable properties of the elements depending on the state of the radio buttons and text fields.&lt;/p&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fmediator%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fmediator%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/behavioralpatterns/mediator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/6y5z3skg/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/behavioralpatterns/mediator/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Memento &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Without violating encapsulation, capture and externalize an object's internal state so that the object can be returned to this state later (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
A dice game in which money increases and decreases:

&lt;ul&gt;
&lt;li&gt;A gamer shakes a dice and the number determine the next state.&lt;/li&gt;
&lt;li&gt;If the number of dice is even, gamer's money doubles, and if it is odd, gamer's money is halved.&lt;/li&gt;
&lt;li&gt;If the gamer's money is less than half of the highest amount, it returns to the highest amount.&lt;/li&gt;
&lt;li&gt;The game is repeated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fmemento%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fmemento%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/behavioralpatterns/memento" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/dps4oynL/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/behavioralpatterns/memento/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Observer &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Observers observe a Subject object holding a numerical value and display the value. The display formats are digits and bar charts.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fobserver%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fobserver%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/behavioralpatterns/observer" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/625zkf8n/4//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/behavioralpatterns/observer/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  State &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Allow an object to alter its behavior when its internal state changes. The object will appear to change its class (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Safe security system that the security status changes with time. When you press a button in a dialog, the message displayed will change depending on whether the time is day or night. The internal time of the dialog advances one hour for every second of real time.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fstate%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fstate%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/behavioralpatterns/state" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/nb70ak9q/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/behavioralpatterns/state/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Strategy &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from the clients that use it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
A game of rock-scissors-paper. Two strategies are available:

&lt;ul&gt;
&lt;li&gt;Random Strategy: showing a random hand signal.&lt;/li&gt;
&lt;li&gt;Mirror Strategy: showing a hand signal from the previous opponent's hand signal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fstrategy%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fstrategy%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/behavioralpatterns/strategy" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/vLr0o6qb/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/behavioralpatterns/strategy/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Template Method &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define the skeleton of an algorithm in an operation, deferring some steps to client subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a character or string repeatedly 5 times.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Ftemplatemethod%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Ftemplatemethod%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/behavioralpatterns/templatemethod" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/qwog56tr/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/behavioralpatterns/templatemethod/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Visitor &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Visitor visits the file system composed of files and directories, and displays a list of files/directories.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fvisitor%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioralpatterns%2Fvisitor%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/behavioralpatterns/visitor" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/kj7yx8rt/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/behavioralpatterns/visitor/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Abstract Factory &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide an interface for creating families of related or dependent objects without specifying their concrete classes (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Create a hierarchical link collection as an HTML file. It can be created in either tabular or list format.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fcreationalpatterns%2Fabstractfactory%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fcreationalpatterns%2Fabstractfactory%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/creationalpatterns/abstractfactory" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/bd4ngmfo/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/creationalpatterns/abstractfactory/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Builder &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Separate the construction of a complex object from its representation so that the same construction process can create different representations (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Create documents in HTML format and text format. It is possible to create different documents in the same construction process.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fcreationalpatterns%2Fbuilder%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fcreationalpatterns%2Fbuilder%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/creationalpatterns/builder" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/g7srkj35/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/creationalpatterns/builder/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Factory Method &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
The subject is a factory to make credit cards. The Factory defines how to create an credit card, but the actual credit card is created by the CreditCardFactory. The "createProduct()" is called a Factory Method, and it is responsible for manufacturing an object.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fcreationalpatterns%2Ffactorymethod%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fcreationalpatterns%2Ffactorymethod%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/creationalpatterns/factorymethod" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/37fvr6xh/6//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/creationalpatterns/factorymethod/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Prototype &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a string enclosed with a frame line, or drawn with an underline. The Client (Main) registers instances of the Display subclass in the Manager class. When necessary, the Manager class asks those registered instances to return a clone. The Client (Main) requires the returned clones to display.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fcreationalpatterns%2Fprototype%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fcreationalpatterns%2Fprototype%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/creationalpatterns/prototype" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/of1Lshpe/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/creationalpatterns/prototype/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Singleton &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Ensure a class has only one instance, and provide a global point of access to it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Check whether the same instance is obtained.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fcreationalpatterns%2Fsingleton%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fcreationalpatterns%2Fsingleton%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/creationalpatterns/singleton" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/3uqpxah0/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/creationalpatterns/singleton/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Adapter &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display the given string as follows&lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-- Nice to meet you --
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or display it as follows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[[ Nice to meet you ]]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fstructuralpatterns%2Fadapter%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fstructuralpatterns%2Fadapter%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/structuralpatterns/adapter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/rogtmce2/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/structuralpatterns/adapter/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Bridge &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Decouple an abstraction from its implementation so that the two can vary independently (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display only one line or display the specified number of lines.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fstructuralpatterns%2Fbridge%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fstructuralpatterns%2Fbridge%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/structuralpatterns/bridge" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/bckgzqt1/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/structuralpatterns/bridge/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Composite &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Compose objects into tree structures to represent whole-part hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Represents a file system composed of files and directories. FileSystemElement makes it possible to treat File and Directory uniformly.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fstructuralpatterns%2Fcomposite%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fstructuralpatterns%2Fcomposite%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/structuralpatterns/composite" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/ecfm1w6y/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/structuralpatterns/composite/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Decorator &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a string with decorative frames. The frames can be combined arbitrarily.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fstructuralpatterns%2Fdecorator%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fstructuralpatterns%2Fdecorator%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/structuralpatterns/decorator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/1xh7euwo/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/structuralpatterns/decorator/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Facade &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Create a simple homepage through a Facade (PageCreator). The Facade gets info from the DataLibrary and uses the info to create an HTML file.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fstructuralpatterns%2Ffacade%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fstructuralpatterns%2Ffacade%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/structuralpatterns/facade" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/qs7azjen/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/structuralpatterns/facade/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Flyweight &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Use sharing to support large numbers of fine-grained objects efficiently (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a string consisting of large characters (0-9 digits only). Large character objects are not created until they are needed. And the created objects are reused.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fstructuralpatterns%2Fflyweight%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fstructuralpatterns%2Fflyweight%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/structuralpatterns/flyweight" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/eLzk75ct/4//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/structuralpatterns/flyweight/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Proxy &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide a surrogate or placeholder for another object to control access to it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Print on a named printer. Setting and changing the printer name is done by Proxy (ProxyPrinter). At the time of printing, create an instance of the RealSubject (RealPrinter) for the first time.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fstructuralpatterns%2Fproxy%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-java-design-pattern-examples%2Fblob%2Fmaster%2Fstructuralpatterns%2Fproxy%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Java Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-java/tree/master/src/main/java/structuralpatterns/proxy" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/0kfg2yub/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples/blob/master/structuralpatterns/proxy/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  References &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Gamma, E. et al. Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994&lt;/li&gt;
&lt;li&gt;Hiroshi Yuki. Learning Design Patterns in Java [In Japanese Language], Softbank publishing, 2004&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Links &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/takaakit/diagram-map-tracing-uml-sysml-elements-across-diagrams-49i7"&gt;Diagram Map: tracing UML/SysML elements across diagrams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/takaakit/design-pattern-examples-in-java" rel="noopener noreferrer"&gt;Design Pattern Examples in Java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>uml</category>
      <category>gof</category>
      <category>designpatterns</category>
      <category>java</category>
    </item>
    <item>
      <title>UML diagram for GoF design pattern examples in TypeScript</title>
      <dc:creator>Takaaki Teshima</dc:creator>
      <pubDate>Mon, 17 May 2021 12:44:33 +0000</pubDate>
      <link>https://dev.to/takaakit/uml-diagram-for-gof-design-pattern-examples-in-typescript-46d5</link>
      <guid>https://dev.to/takaakit/uml-diagram-for-gof-design-pattern-examples-in-typescript-46d5</guid>
      <description>&lt;p&gt;This post lists UML diagrams of GoF design pattern examples written in TypeScript.  The UML diagrams are displayed using &lt;em&gt;Diagram Map&lt;/em&gt;. If you want to know about &lt;em&gt;Diagram Map&lt;/em&gt;, see &lt;a href="https://dev.to/takaakit/diagram-map-tracing-uml-sysml-elements-across-diagrams-49i7"&gt;this post&lt;/a&gt;. Also, you can get UML model data and TypeScript code of the examples from &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript" rel="noopener noreferrer"&gt;here&lt;/a&gt;.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Table of Contents
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Behavioral Patterns

&lt;ul&gt;
&lt;li&gt;Chain of Responsibility&lt;/li&gt;
&lt;li&gt;Command&lt;/li&gt;
&lt;li&gt;Interpreter&lt;/li&gt;
&lt;li&gt;Iterator&lt;/li&gt;
&lt;li&gt;Mediator&lt;/li&gt;
&lt;li&gt;Memento&lt;/li&gt;
&lt;li&gt;Observer&lt;/li&gt;
&lt;li&gt;State&lt;/li&gt;
&lt;li&gt;Strategy&lt;/li&gt;
&lt;li&gt;Template Method&lt;/li&gt;
&lt;li&gt;Visitor&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Creational Patterns

&lt;ul&gt;
&lt;li&gt;Abstract Factory&lt;/li&gt;
&lt;li&gt;Builder&lt;/li&gt;
&lt;li&gt;Factory Method&lt;/li&gt;
&lt;li&gt;Prototype&lt;/li&gt;
&lt;li&gt;Singleton&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Structural Patterns

&lt;ul&gt;
&lt;li&gt;Adapter&lt;/li&gt;
&lt;li&gt;Bridge&lt;/li&gt;
&lt;li&gt;Composite&lt;/li&gt;
&lt;li&gt;Decorator&lt;/li&gt;
&lt;li&gt;Facade&lt;/li&gt;
&lt;li&gt;Flyweight&lt;/li&gt;
&lt;li&gt;Proxy&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;References&lt;/li&gt;

&lt;li&gt;Links&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Chain of Responsibility &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
A trouble is turned around among supporters, and the trouble will be handled by the supporter who can handle it. There are four types of supporters below:

&lt;ul&gt;
&lt;li&gt;LazySupporter doesn't handle any trouble&lt;/li&gt;
&lt;li&gt;MoodySupporter handles odd ID troubles&lt;/li&gt;
&lt;li&gt;SpecialSupporter handles a trouble of the target ID.&lt;/li&gt;
&lt;li&gt;LimitedSupporter handles troubles below the limit ID.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fchain-of-responsibility%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fchain-of-responsibility%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/behavioral-patterns/chain-of-responsibility" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/9zk4faog/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/behavioral-patterns/chain-of-responsibility/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Command &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Encapsulate a request as an object, thereby letting you parametrize clients with different requests, queue or log requests, and support undoable operations (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Simple drawing application:

&lt;ul&gt;
&lt;li&gt;Draw a path with points by dragging the mouse.&lt;/li&gt;
&lt;li&gt;Revert to one previous drawing by pressing the Undo button.&lt;/li&gt;
&lt;li&gt;Erase all drawing by pressing the Clear button.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fcommand%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fcommand%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/behavioral-patterns/command" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/6b4nvscm/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/behavioral-patterns/command/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Interpreter &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
An interpreter for mini language to operate radio controlled car. It parses the following syntax composed of "forward", "left", "right", and "repeat" commands:&lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;program&amp;gt;      ::= program &amp;lt;command list&amp;gt;
&amp;lt;command list&amp;gt; ::= &amp;lt;command&amp;gt;* end
&amp;lt;command&amp;gt;      ::= &amp;lt;repeat&amp;gt; | &amp;lt;action&amp;gt;
&amp;lt;repeat&amp;gt;       ::= repeat &amp;lt;number&amp;gt; &amp;lt;command list&amp;gt;
&amp;lt;action&amp;gt;       ::= forward | right | left
&amp;lt;number&amp;gt;       ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Finterpreter%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Finterpreter%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/behavioral-patterns/interpreter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/5f9u1Lmy/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/behavioral-patterns/interpreter/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Iterator &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Add books in a bookshelf and display the names of the book in turn.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fiterator%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fiterator%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/behavioral-patterns/iterator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/r20hcqzg/5//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/behavioral-patterns/iterator/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Mediator &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Show a login dialog for entering a username and password. The dialog has the following elements:

&lt;ul&gt;
&lt;li&gt;"Guest" and "Login" radio buttons&lt;/li&gt;
&lt;li&gt;"Username" and "Password" text fields&lt;/li&gt;
&lt;li&gt;"OK" and "Cancel" buttons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And change the editable properties of the elements depending on the state of the radio buttons and text fields.&lt;/p&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fmediator%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fmediator%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/behavioral-patterns/mediator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/kdgw0var/5//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/behavioral-patterns/mediator/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Memento &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Without violating encapsulation, capture and externalize an object's internal state so that the object can be returned to this state later (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
A dice game in which money increases and decreases:

&lt;ul&gt;
&lt;li&gt;A gamer shakes a dice and the number determine the next state.&lt;/li&gt;
&lt;li&gt;If the number of dice is even, gamer's money doubles, and if it is odd, gamer's money is halved.&lt;/li&gt;
&lt;li&gt;If the gamer's money is less than half of the highest amount, it returns to the highest amount.&lt;/li&gt;
&lt;li&gt;The game is repeated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fmemento%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fmemento%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/behavioral-patterns/memento" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/udwzpn2a/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/behavioral-patterns/memento/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Observer &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Observers observe a Subject object holding a numerical value and display the value. The display formats are digits and bar charts.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fobserver%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fobserver%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/behavioral-patterns/observer" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/a5md90gz/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/behavioral-patterns/observer/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  State &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Allow an object to alter its behavior when its internal state changes. The object will appear to change its class (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Safe security system that the security status changes with time. When you press a button in a dialog, the message displayed will change depending on whether the time is day or night. The internal time of the dialog advances one hour for every second of real time.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fstate%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fstate%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/behavioral-patterns/state" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/L3yhe8of/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/behavioral-patterns/state/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Strategy &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from the clients that use it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
A game of rock-scissors-paper. Two strategies are available:

&lt;ul&gt;
&lt;li&gt;Random Strategy: showing a random hand signal.&lt;/li&gt;
&lt;li&gt;Mirror Strategy: showing a hand signal from the previous opponent's hand signal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fstrategy%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fstrategy%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/behavioral-patterns/strategy" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/kyLve8go/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/behavioral-patterns/strategy/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Template Method &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define the skeleton of an algorithm in an operation, deferring some steps to client subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a character or string repeatedly 5 times.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Ftemplate-method%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Ftemplate-method%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/behavioral-patterns/template-method" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/bcnt8qra/6//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/behavioral-patterns/template-method/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Visitor &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Visitor visits the file system composed of files and directories, and displays a list of files/directories.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fvisitor%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral-patterns%2Fvisitor%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/behavioral-patterns/visitor" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/c24b3rda/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/behavioral-patterns/visitor/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Abstract Factory &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide an interface for creating families of related or dependent objects without specifying their concrete classes (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Create a hierarchical link collection as an HTML file. It can be created in either tabular or list format.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fcreational-patterns%2Fabstract-factory%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fcreational-patterns%2Fabstract-factory%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/creational-patterns/abstract-factory" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/ews91mcL/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/creational-patterns/abstract-factory/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Builder &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Separate the construction of a complex object from its representation so that the same construction process can create different representations (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Create documents in HTML format and text format. It is possible to create different documents in the same construction process.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fcreational-patterns%2Fbuilder%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fcreational-patterns%2Fbuilder%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/creational-patterns/builder" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/fra9yu5m/4//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/creational-patterns/builder/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Factory Method &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
The subject is a factory to make credit cards. The Factory defines how to create an credit card, but the actual credit card is created by the CreditCardFactory. The "createProduct()" is called a Factory Method, and it is responsible for manufacturing an object.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fcreational-patterns%2Ffactory-method%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fcreational-patterns%2Ffactory-method%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/creational-patterns/factory-method" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/rfg8t4dx/7//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/creational-patterns/factory-method/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Prototype &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a string enclosed with a frame line, or drawn with an underline. The Client (Main) registers instances of the Display subclass in the Manager class. When necessary, the Manager class asks those registered instances to return a clone. The Client (Main) requires the returned clones to display.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fcreational-patterns%2Fprototype%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fcreational-patterns%2Fprototype%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/creational-patterns/prototype" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/p8z5dasv/4//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/creational-patterns/prototype/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Singleton &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Ensure a class has only one instance, and provide a global point of access to it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Check whether the same instance is obtained.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fcreational-patterns%2Fsingleton%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fcreational-patterns%2Fsingleton%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/creational-patterns/singleton" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/3o9xz8mh/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/creational-patterns/singleton/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Adapter &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display the given string as follows&lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-- Nice to meet you --
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or display it as follows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[[ Nice to meet you ]]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fstructural-patterns%2Fadapter%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fstructural-patterns%2Fadapter%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/structural-patterns/adapter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/huscqp84/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/structural-patterns/adapter/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Bridge &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Decouple an abstraction from its implementation so that the two can vary independently (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display only one line or display the specified number of lines.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fstructural-patterns%2Fbridge%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fstructural-patterns%2Fbridge%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/structural-patterns/bridge" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/3t7uy2av/5//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/structural-patterns/bridge/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Composite &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Compose objects into tree structures to represent whole-part hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Represents a file system composed of files and directories. FileSystemElement makes it possible to treat File and Directory uniformly.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fstructural-patterns%2Fcomposite%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fstructural-patterns%2Fcomposite%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/structural-patterns/composite" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/9wsxz4Lb/4//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/structural-patterns/composite/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Decorator &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a string with decorative frames. The frames can be combined arbitrarily.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fstructural-patterns%2Fdecorator%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fstructural-patterns%2Fdecorator%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/structural-patterns/decorator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/qu769pxy/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/structural-patterns/decorator/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Facade &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Create a simple homepage through a Facade (PageCreator). The Facade gets info from the DataLibrary and uses the info to create an HTML file.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fstructural-patterns%2Ffacade%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fstructural-patterns%2Ffacade%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/structural-patterns/facade" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/gzp6c89d/5//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/structural-patterns/facade/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Flyweight &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Use sharing to support large numbers of fine-grained objects efficiently (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a string consisting of large characters (0-9 digits only). Large character objects are not created until they are needed. And the created objects are reused.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fstructural-patterns%2Fflyweight%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fstructural-patterns%2Fflyweight%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/structural-patterns/flyweight" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/5su60q8b/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/structural-patterns/flyweight/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Proxy &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide a surrogate or placeholder for another object to control access to it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Print on a named printer. Setting and changing the printer name is done by Proxy (ProxyPrinter). At the time of printing, create an instance of the RealSubject (RealPrinter) for the first time.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fstructural-patterns%2Fproxy%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-typescript-design-pattern-examples%2Fblob%2Fmaster%2Fstructural-patterns%2Fproxy%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript/tree/master/structural-patterns/proxy" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/sfvo96k3/4//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-typescript-design-pattern-examples/blob/master/structural-patterns/proxy/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  References &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Gamma, E. et al. Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994&lt;/li&gt;
&lt;li&gt;Hiroshi Yuki. Learning Design Patterns in Java [In Japanese Language], Softbank publishing, 2004&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Links &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/takaakit/diagram-map-tracing-uml-sysml-elements-across-diagrams-49i7"&gt;Diagram Map: tracing UML/SysML elements across diagrams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/takaakit/design-pattern-examples-in-typescript" rel="noopener noreferrer"&gt;Design Pattern Examples in TypeScript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>uml</category>
      <category>gof</category>
      <category>designpatterns</category>
      <category>typescript</category>
    </item>
    <item>
      <title>UML diagram for GoF design pattern examples in Python</title>
      <dc:creator>Takaaki Teshima</dc:creator>
      <pubDate>Mon, 10 May 2021 04:47:47 +0000</pubDate>
      <link>https://dev.to/takaakit/uml-diagram-for-gof-design-pattern-examples-in-python-4j40</link>
      <guid>https://dev.to/takaakit/uml-diagram-for-gof-design-pattern-examples-in-python-4j40</guid>
      <description>&lt;p&gt;This post lists UML diagrams of GoF design pattern examples written in Python.  The UML diagrams are displayed using &lt;em&gt;Diagram Map&lt;/em&gt;. If you want to know about &lt;em&gt;Diagram Map&lt;/em&gt;, see &lt;a href="https://dev.to/takaakit/diagram-map-tracing-uml-sysml-elements-across-diagrams-49i7"&gt;this post&lt;/a&gt;. Also, you can get UML model data and Python code of the examples from &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python" rel="noopener noreferrer"&gt;here&lt;/a&gt;.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Table of Contents
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Behavioral Patterns

&lt;ul&gt;
&lt;li&gt;Chain of Responsibility&lt;/li&gt;
&lt;li&gt;Command&lt;/li&gt;
&lt;li&gt;Interpreter&lt;/li&gt;
&lt;li&gt;Iterator&lt;/li&gt;
&lt;li&gt;Mediator&lt;/li&gt;
&lt;li&gt;Memento&lt;/li&gt;
&lt;li&gt;Observer&lt;/li&gt;
&lt;li&gt;State&lt;/li&gt;
&lt;li&gt;Strategy&lt;/li&gt;
&lt;li&gt;Template Method&lt;/li&gt;
&lt;li&gt;Visitor&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Creational Patterns

&lt;ul&gt;
&lt;li&gt;Abstract Factory&lt;/li&gt;
&lt;li&gt;Builder&lt;/li&gt;
&lt;li&gt;Factory Method&lt;/li&gt;
&lt;li&gt;Prototype&lt;/li&gt;
&lt;li&gt;Singleton&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Structural Patterns

&lt;ul&gt;
&lt;li&gt;Adapter&lt;/li&gt;
&lt;li&gt;Bridge&lt;/li&gt;
&lt;li&gt;Composite&lt;/li&gt;
&lt;li&gt;Decorator&lt;/li&gt;
&lt;li&gt;Facade&lt;/li&gt;
&lt;li&gt;Flyweight&lt;/li&gt;
&lt;li&gt;Proxy&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;References&lt;/li&gt;

&lt;li&gt;Links&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Chain of Responsibility &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
A trouble is turned around among supporters, and the trouble will be handled by the supporter who can handle it. There are four types of supporters below:

&lt;ul&gt;
&lt;li&gt;LazySupporter doesn't handle any trouble&lt;/li&gt;
&lt;li&gt;MoodySupporter handles odd ID troubles&lt;/li&gt;
&lt;li&gt;SpecialSupporter handles a trouble of the target ID.&lt;/li&gt;
&lt;li&gt;LimitedSupporter handles troubles below the limit ID.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fchain_of_responsibility%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fchain_of_responsibility%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/behavioral_patterns/chain_of_responsibility" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/kcLa7su0/4//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/behavioral_patterns/chain_of_responsibility/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Command &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Encapsulate a request as an object, thereby letting you parametrize clients with different requests, queue or log requests, and support undoable operations (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Simple drawing application:

&lt;ul&gt;
&lt;li&gt;Draw a path with points by dragging the mouse.&lt;/li&gt;
&lt;li&gt;Revert to one previous drawing by pressing the Undo button.&lt;/li&gt;
&lt;li&gt;Erase all drawing by pressing the Clear button.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fcommand%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fcommand%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/behavioral_patterns/command" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/r8b3g7sv/6//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/behavioral_patterns/command/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Interpreter &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
An interpreter for mini language to operate radio controlled car. It parses the following syntax composed of "forward", "left", "right", and "repeat" commands:&lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;program&amp;gt;      ::= program &amp;lt;command list&amp;gt;
&amp;lt;command list&amp;gt; ::= &amp;lt;command&amp;gt;* end
&amp;lt;command&amp;gt;      ::= &amp;lt;repeat&amp;gt; | &amp;lt;action&amp;gt;
&amp;lt;repeat&amp;gt;       ::= repeat &amp;lt;number&amp;gt; &amp;lt;command list&amp;gt;
&amp;lt;action&amp;gt;       ::= forward | right | left
&amp;lt;number&amp;gt;       ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Finterpreter%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Finterpreter%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/behavioral_patterns/interpreter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/n1L23exs/6//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/behavioral_patterns/interpreter/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Iterator &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Add books in a bookshelf and display the names of the book in turn.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fiterator%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fiterator%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/behavioral_patterns/iterator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/skmxbufq/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/behavioral_patterns/iterator/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Mediator &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Show a login dialog for entering a username and password. The dialog has the following elements:

&lt;ul&gt;
&lt;li&gt;"Guest" and "Login" radio buttons&lt;/li&gt;
&lt;li&gt;"Username" and "Password" text fields&lt;/li&gt;
&lt;li&gt;"OK" and "Cancel" buttons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And change the editable properties of the elements depending on the state of the radio buttons and text fields.&lt;/p&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fmediator%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fmediator%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/behavioral_patterns/mediator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/xdykgenz/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/behavioral_patterns/mediator/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Memento &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Without violating encapsulation, capture and externalize an object's internal state so that the object can be returned to this state later (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
A dice game in which money increases and decreases:

&lt;ul&gt;
&lt;li&gt;A gamer shakes a dice and the number determine the next state.&lt;/li&gt;
&lt;li&gt;If the number of dice is even, gamer's money doubles, and if it is odd, gamer's money is halved.&lt;/li&gt;
&lt;li&gt;If the gamer's money is less than half of the highest amount, it returns to the highest amount.&lt;/li&gt;
&lt;li&gt;The game is repeated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fmemento%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fmemento%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/behavioral_patterns/memento" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/pr6Lnxhy/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/behavioral_patterns/memento/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Observer &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Observers observe a Subject object holding a numerical value and display the value. The display formats are digits and bar charts.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fobserver%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fobserver%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/behavioral_patterns/observer" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/ucg97a86/5//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/behavioral_patterns/observer/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  State &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Allow an object to alter its behavior when its internal state changes. The object will appear to change its class (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Safe security system that the security status changes with time. When you press a button in a dialog, the message displayed will change depending on whether the time is day or night. The internal time of the dialog advances one hour for every second of real time.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fstate%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fstate%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/behavioral_patterns/state" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/L9wnbjea/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/behavioral_patterns/state/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Strategy &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from the clients that use it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
A game of rock-scissors-paper. Two strategies are available:

&lt;ul&gt;
&lt;li&gt;Random Strategy: showing a random hand signal.&lt;/li&gt;
&lt;li&gt;Mirror Strategy: showing a hand signal from the previous opponent's hand signal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fstrategy%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fstrategy%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/behavioral_patterns/strategy" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/axzt2whr/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/behavioral_patterns/strategy/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Template Method &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define the skeleton of an algorithm in an operation, deferring some steps to client subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a character or string repeatedly 5 times.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Ftemplate_method%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Ftemplate_method%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/behavioral_patterns/template_method" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/Lpct80wd/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/behavioral_patterns/template_method/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Visitor &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Visitor visits the file system composed of files and directories, and displays a list of files/directories.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fvisitor%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fbehavioral_patterns%2Fvisitor%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/behavioral_patterns/visitor" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/yt6bh847/4//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/behavioral_patterns/visitor/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Abstract Factory &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide an interface for creating families of related or dependent objects without specifying their concrete classes (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Create a hierarchical link collection as an HTML file. It can be created in either tabular or list format.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fabstract_factory%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fabstract_factory%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/creational_patterns/abstract_factory" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/bdf83h10/4//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/creational_patterns/abstract_factory/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Builder &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Separate the construction of a complex object from its representation so that the same construction process can create different representations (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Create documents in HTML format and text format. It is possible to create different documents in the same construction process.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fbuilder%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fbuilder%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/creational_patterns/builder" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/z4asqhc1/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/creational_patterns/builder/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Factory Method &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
The subject is a factory to make credit cards. The Factory defines how to create an credit card, but the actual credit card is created by the CreditCardFactory. The "createProduct()" is called a Factory Method, and it is responsible for manufacturing an object.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Ffactory_method%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Ffactory_method%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/creational_patterns/factory_method" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/e0ymt21f/6//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/creational_patterns/factory_method/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Prototype &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a string enclosed with a frame line, or drawn with an underline. The Client (Main) registers instances of the Display subclass in the Manager class. When necessary, the Manager class asks those registered instances to return a clone. The Client (Main) requires the returned clones to display.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fprototype%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fprototype%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/creational_patterns/prototype" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/dzy73nk4/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/creational_patterns/prototype/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Singleton &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Ensure a class has only one instance, and provide a global point of access to it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Check whether the same instance is obtained.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fsingleton%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fcreational_patterns%2Fsingleton%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/creational_patterns/singleton" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/71m0ucy5/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/creational_patterns/singleton/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Adapter &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display the given string as follows&lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-- Nice to meet you --
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or display it as follows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[[ Nice to meet you ]]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fadapter%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fadapter%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/structural_patterns/adapter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/utp3mbjo/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/structural_patterns/adapter/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Bridge &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Decouple an abstraction from its implementation so that the two can vary independently (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display only one line or display the specified number of lines.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fbridge%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fbridge%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/structural_patterns/bridge" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/g7dphf6e/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/structural_patterns/bridge/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Composite &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Compose objects into tree structures to represent whole-part hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Represents a file system composed of files and directories. FileSystemElement makes it possible to treat File and Directory uniformly.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fcomposite%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fcomposite%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/structural_patterns/composite" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/q8hudxfm/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/structural_patterns/composite/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Decorator &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a string with decorative frames. The frames can be combined arbitrarily.

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fdecorator%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fdecorator%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/structural_patterns/decorator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/2sko5rwy/3//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/structural_patterns/decorator/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Facade &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Create a simple homepage through a Facade (PageCreator). The Facade gets info from the DataLibrary and uses the info to create an HTML file.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Ffacade%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Ffacade%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/structural_patterns/facade" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/nfh5kmge/2//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/structural_patterns/facade/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Flyweight &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Use sharing to support large numbers of fine-grained objects efficiently (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Display a string consisting of large characters (0-9 digits only). Large character objects are not created until they are needed. And the created objects are reused.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fflyweight%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fflyweight%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/structural_patterns/flyweight" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/d680tLjr/5//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/structural_patterns/flyweight/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Proxy &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;
  &lt;strong&gt;Pattern Intent&lt;/strong&gt;
  &lt;br&gt;
Provide a surrogate or placeholder for another object to control access to it (Design Patterns: Elements of Reusable Object-Oriented Software).&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;About This Example&lt;/strong&gt;
  &lt;br&gt;
Print on a named printer. Setting and changing the printer name is done by Proxy (ProxyPrinter). At the time of printing, create an instance of the RealSubject (RealPrinter) for the first time.  

&lt;p&gt;Execution Result:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fproxy%2FExecutionResult.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ftakaakit%2Fuml-diagram-for-python-design-pattern-examples%2Fblob%2Fmaster%2Fstructural_patterns%2Fproxy%2FExecutionResult.png%3Fraw%3Dtrue" alt="Execution Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python Code: &lt;a href="https://github.com/takaakit/design-pattern-examples-in-python/tree/master/structural_patterns/proxy" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/takaakit2021/k72xzr49/7//embedded/result//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://htmlpreview.github.io/?https://github.com/takaakit/uml-diagram-for-python-design-pattern-examples/blob/master/structural_patterns/proxy/DiagramMap.html" rel="noopener noreferrer"&gt;Open the diagram in full screen&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  References &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Gamma, E. et al. Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994&lt;/li&gt;
&lt;li&gt;Hiroshi Yuki. Learning Design Patterns in Java [In Japanese Language], Softbank publishing, 2004&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Links &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/takaakit/diagram-map-tracing-uml-sysml-elements-across-diagrams-49i7"&gt;Diagram Map: tracing UML/SysML elements across diagrams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/takaakit/design-pattern-examples-in-python" rel="noopener noreferrer"&gt;Design Pattern Examples in Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>uml</category>
      <category>gof</category>
      <category>designpatterns</category>
      <category>python</category>
    </item>
    <item>
      <title>Diagram Map: tracing UML elements across diagrams</title>
      <dc:creator>Takaaki Teshima</dc:creator>
      <pubDate>Mon, 14 Dec 2020 04:21:25 +0000</pubDate>
      <link>https://dev.to/takaakit/diagram-map-tracing-uml-sysml-elements-across-diagrams-49i7</link>
      <guid>https://dev.to/takaakit/diagram-map-tracing-uml-sysml-elements-across-diagrams-49i7</guid>
      <description>&lt;p&gt;This article introduces Diagram Map (a term I coined) that makes it easier to trace UML model elements across diagrams. The Diagram Map displays different types of UML diagrams together and highlights links between model elements and diagrams. I think the Diagram Map helps you understand the contents of the UML diagrams.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8hz8m0js7l8q9zcztlk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8hz8m0js7l8q9zcztlk.gif" alt="Diagram Map" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can try many Diagram Map examples on &lt;a href="https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples" rel="noopener noreferrer"&gt;this GitHub project&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Diagram Map displays different kinds of diagrams together and lays out the same kind of diagrams in the same row.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fnbgllzt936vpb76zxsdc.png" width="500" height="287"&gt;
&lt;/li&gt;
&lt;li&gt;Diagram Map shows the following:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Links&lt;/strong&gt; between UML elements of the same type.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjxvphrzv8haapc1k7cox.png" width="300" height="220"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;References&lt;/strong&gt; between elements and diagrams.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fq6ncmo45w0fdvtcnemi7.png" width="400" height="199"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hyperlinks&lt;/strong&gt; in the tooltip text.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fpduwlc9q9qcivc09x3i2.png" width="300" height="172"&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;You can zoom and pan using a mouse on a Diagram Map like Google Maps. You need to have JavaScript enabled in your browser.&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to create
&lt;/h2&gt;

&lt;p&gt;You can create a Diagram Map by using &lt;a href="https://sites.google.com/view/m-plus-plugin/home" rel="noopener noreferrer"&gt;my plug-in (m plus)&lt;/a&gt; in a modeling tool &lt;a href="https://astah.net/products/" rel="noopener noreferrer"&gt;Astah&lt;/a&gt;. The plug-in is FREE to use for both Personal and Commercial purposes. Astah is free (Free Student License) or paid. The creation procedure is as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the modeling tool &lt;a href="https://astah.net/downloads/" rel="noopener noreferrer"&gt;Astah UML/Professional&lt;/a&gt;, download &lt;a href="https://sites.google.com/view/m-plus-plugin/download" rel="noopener noreferrer"&gt;m plus plug-in&lt;/a&gt;, and add the plug-in to Astah. - 
&lt;a href="https://astahblog.com/2014/12/15/astah_plugins/" rel="noopener noreferrer"&gt;How to add a plug-in to Astah&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Create models and diagrams with Astah.&lt;/li&gt;
&lt;li&gt;Select diagrams in the model browser and press the "Create Diagram Map" button. If you select packages, all the diagrams under them will be processed. After you press the button, a Diagram Map will be created and be opened in a browser.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcq58i7l3ywsdbatx23eb.png" width="578" height="336"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Other
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Diagram Map is for viewing only. If you want to edit a model or diagram, do so with Astah.&lt;/li&gt;
&lt;li&gt;You have to use Astah to create a Diagram Map. Support for other modeling tools is a future consideration.&lt;/li&gt;
&lt;li&gt;The m plus plug-in is a closed source now. Open-sourcing is a future consideration, too.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/takaakit/uml-diagram-for-java-design-pattern-examples" rel="noopener noreferrer"&gt;Diagram Map examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://astah.net/downloads/" rel="noopener noreferrer"&gt;Astah downloads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sites.google.com/view/m-plus-plugin/download" rel="noopener noreferrer"&gt;m plus plug-in downloads&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy modeling!&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>uml</category>
      <category>traceability</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
