87
Design Pattern -- from Java to Ruby Richard Ekohe www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Design Pattern From Java To Ruby

  • Upload
    yelogic

  • View
    1.253

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Design Pattern From Java To Ruby

Design Pattern -- from Java to Ruby

RichardEkohe

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 2: Design Pattern From Java To Ruby

Why use Design Pattern

For reuse

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 3: Design Pattern From Java To Ruby

Why use Design Pattern

For communication

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 4: Design Pattern From Java To Ruby

Why use Design Pattern

For communication

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Define a Node interface, all of leaf nodes and internal nodes should implements the interface, internal nodes has a list that

includes other internal nodes and leaf nodes and it can add and remove sub-nodes. But leaf node can’t have add sub-node method.

Page 5: Design Pattern From Java To Ruby

Why use Design Pattern

For communication

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Define a Node interface, all of leaf nodes and internal nodes should implements the interface, internal nodes has a list that

includes other internal nodes and leaf nodes and it can add and remove sub-nodes. But leaf node can’t have add sub-node method.

Page 6: Design Pattern From Java To Ruby

Why use Design Pattern

For communication

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Define a Node interface, all of leaf nodes and internal nodes should implements the interface, internal nodes has a list that

includes other internal nodes and leaf nodes and it can add and remove sub-nodes. But leaf node can’t have add sub-node method.

Page 7: Design Pattern From Java To Ruby

Why use Design Pattern

For communication

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 8: Design Pattern From Java To Ruby

Why use Design Pattern

For communication

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Composite Pattern

Page 9: Design Pattern From Java To Ruby

Why use Design Pattern

For communication

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Composite Pattern

Page 10: Design Pattern From Java To Ruby

Difference from java to ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 11: Design Pattern From Java To Ruby

Difference from java to ruby

Classes are Objects

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 12: Design Pattern From Java To Ruby

Difference from java to ruby

Classes are Objects

Messages, not function call

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 13: Design Pattern From Java To Ruby

Difference from java to ruby

Classes are Objects

Messages, not function call

Duck Typing

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 14: Design Pattern From Java To Ruby

Difference from java to ruby

Classes are Objects

Messages, not function call

Duck Typing

Mixin

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 15: Design Pattern From Java To Ruby

Singleton Pattern

ensures a class has only one instance, and provides a global point of access to it

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 16: Design Pattern From Java To Ruby

Singleton Pattern

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 17: Design Pattern From Java To Ruby

Singleton Pattern

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

You are my only wife

Page 18: Design Pattern From Java To Ruby

Singleton Pattern

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

You are my only wife

You are my only husband

Page 19: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Singleton Pattern -- java

Page 20: Design Pattern From Java To Ruby

Eager loading

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Singleton Pattern -- java

Page 21: Design Pattern From Java To Ruby

Eager loading

Lazy loading

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Singleton Pattern -- java

Page 22: Design Pattern From Java To Ruby

Ruby built-in singleton

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Singleton Pattern -- ruby

Page 23: Design Pattern From Java To Ruby

Ruby built-in singleton

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Singleton Pattern -- ruby

Page 24: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 25: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 26: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 27: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 28: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 29: Design Pattern From Java To Ruby

Built-in (Singleton)

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Ruby for Design Pattern

Page 30: Design Pattern From Java To Ruby

Observer Pattern

defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 31: Design Pattern From Java To Ruby

Observer Pattern

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Temperature

Detector

Subscribe

Page 32: Design Pattern From Java To Ruby

Observer Pattern

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Temperature

Detector

SubscribeTempraturechanged

Page 33: Design Pattern From Java To Ruby

Observer Pattern

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Temperature

Detector

Subscribe

Notify Notify

Tempraturechanged

Page 34: Design Pattern From Java To Ruby

Define interface by yourself

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Observer Pattern -- java

Page 35: Design Pattern From Java To Ruby

Define interface by yourself

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Observer Pattern -- java

Page 36: Design Pattern From Java To Ruby

Define interface by yourself

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Observer Pattern -- java

Page 37: Design Pattern From Java To Ruby

Define interface by yourself

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Observer Pattern -- java

Page 38: Design Pattern From Java To Ruby

Define interface by yourself

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Observer Pattern -- java

Page 39: Design Pattern From Java To Ruby

Define interface by yourself

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Observer Pattern -- java

Page 40: Design Pattern From Java To Ruby

Java built-in observer

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Observer Pattern -- java

Page 41: Design Pattern From Java To Ruby

Java built-in observer

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Observer Pattern -- java

Page 42: Design Pattern From Java To Ruby

Ruby built-in observer

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Observer Pattern -- ruby

Page 43: Design Pattern From Java To Ruby

Ruby built-in observer

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Observer Pattern -- ruby

Page 44: Design Pattern From Java To Ruby

Ruby built-in observer

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Observer Pattern -- ruby

Page 45: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 46: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 47: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 48: Design Pattern From Java To Ruby

Built-in (Singleton, Observer)

Mixin

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Ruby for Design Pattern

Page 49: Design Pattern From Java To Ruby

Iterator Pattern provides a way to access the elements of an

aggregate object sequentially without exposing its underlying representation

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 50: Design Pattern From Java To Ruby

Iterator Pattern

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Count 1 2 3 10

Page 51: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Merb - Offshore Web Development

Iterator Pattern -- java Java built-in Iterator and mock Iterator

Page 52: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Merb - Offshore Web Development

Iterator Pattern -- java Java built-in Iterator and mock Iterator

Page 53: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Merb - Offshore Web Development

Iterator Pattern -- java Java built-in Iterator and mock Iterator

Page 54: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Merb - Offshore Web Development

Iterator Pattern -- java Java built-in Iterator and mock Iterator

Page 55: Design Pattern From Java To Ruby

Nothing, just .each

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Iterator Pattern -- ruby

Page 56: Design Pattern From Java To Ruby

Nothing, just .each

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Iterator Pattern -- ruby

Page 57: Design Pattern From Java To Ruby

Nothing, just .each

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Iterator Pattern -- ruby

Page 58: Design Pattern From Java To Ruby

Built-in (Singleton, Observer, Iterator)

Mixin

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Ruby for Design Pattern

Page 59: Design Pattern From Java To Ruby

returns an instance of one of several possible classes, depending on the data provided to it.

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Simple Factory Pattern

Page 60: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Simple Factory Pattern

Page 61: Design Pattern From Java To Ruby

Compare with String, a lot of if/else

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Simple Factory Pattern -- java

Page 62: Design Pattern From Java To Ruby

Compare with String, a lot of if/else

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Simple Factory Pattern -- java

Page 63: Design Pattern From Java To Ruby

Compare with String, a lot of if/else

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Simple Factory Pattern -- java

Page 64: Design Pattern From Java To Ruby

Compare with String, a lot of if/else

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Simple Factory Pattern -- java

Page 65: Design Pattern From Java To Ruby

Compare with String, a lot of if/else

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Simple Factory Pattern -- java

Page 66: Design Pattern From Java To Ruby

Compare with String, a lot of if/else

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Simple Factory Pattern -- java

Page 67: Design Pattern From Java To Ruby

Classes are Objects

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Simple Factory Pattern -- ruby

Page 68: Design Pattern From Java To Ruby

Classes are Objects

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Simple Factory Pattern -- ruby

Page 69: Design Pattern From Java To Ruby

Classes are Objects

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Simple Factory Pattern -- ruby

Page 70: Design Pattern From Java To Ruby

Classes are Objects

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Simple Factory Pattern -- ruby

Page 71: Design Pattern From Java To Ruby

Built-in (Singleton, Observer, Iterator)‏

Mixin

Classes are Objects

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Ruby for Design Pattern

Page 72: Design Pattern From Java To Ruby

encapsulates a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Command Pattern

Page 73: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Command Pattern

Page 74: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Command Pattern -- java

Page 75: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Command Pattern -- java

Page 76: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Command Pattern -- java

Page 77: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Command Pattern -- java

Page 78: Design Pattern From Java To Ruby

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Command Pattern -- java

Page 79: Design Pattern From Java To Ruby

Proc

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Command Pattern -- ruby

Page 80: Design Pattern From Java To Ruby

Proc

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Command Pattern -- ruby

Page 81: Design Pattern From Java To Ruby

Built-in (Singleton, Observer, Iterator)‏

Mixin

Classes are Objects

Proc

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Ruby for Design Pattern

Page 82: Design Pattern From Java To Ruby

Make use of ruby advantage

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Other Design Patterns

Page 83: Design Pattern From Java To Ruby

Ruby's Principle

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 84: Design Pattern From Java To Ruby

Ruby's Principle

DRY – Don't Repeat Yourself

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 85: Design Pattern From Java To Ruby

Ruby's Principle

DRY – Don't Repeat Yourself

Convention Over Configuration

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 86: Design Pattern From Java To Ruby

Resources

Design Pattern – Elements of Reusable Object-Oriented Software

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Head First Design Pattern

Kathy Sierra, Bert Bates

Design Pattern in Ruby

Russ Olsen

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Page 87: Design Pattern From Java To Ruby

Q&A

happy to discuss and fix my mistakes

www.ekohe.comWeb Development & Graphic DesignChina Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development