design patterns in luster

99
Design Patterns © 2014 Luster

Upload: jason-chung

Post on 20-Jun-2015

1.203 views

Category:

Technology


3 download

DESCRIPTION

2014 達暉資訊教育訓練課程 - Design Patterns 課程簡介: 蛇麼!居然可以~ 行雲流水般回答何謂 觀察者模式 而不是 我認識它 但無法完整說出它是誰 看完整本 設計模式 書籍 而不是 三秒就倒頭入睡? 寫出 一段段自己滿意程式 而不是 質疑是否有更好寫法 其實 “Design Patterns” 並沒有這麼困難,這次的課程,我們會透過情境的方式,帶大家慢慢走入這個世界~

TRANSCRIPT

Page 1: Design Patterns in Luster

Design Patterns

© 2014 Luster

Page 2: Design Patterns in Luster

Me

Page 3: Design Patterns in Luster

Reference啓

Page 4: Design Patterns in Luster

Object Oriented

Basic

Page 5: Design Patterns in Luster

⽤用情境,學設計模式

Page 6: Design Patterns in Luster
Page 7: Design Patterns in Luster
Page 8: Design Patterns in Luster

Class Diagram

MallardDuck

display() { }swim()quack()

RedheadDuck

display() { }swim()quack()

Page 9: Design Patterns in Luster

Class Diagram

MallardDuck

display() { }swim()quack()

RedheadDuck

display() { }swim()quack()

Duck

Page 10: Design Patterns in Luster

Class Diagram

MallardDuck

display() { } display() { }

RedheadDuck

Duck

swim()quack()

Page 11: Design Patterns in Luster

Class Diagram

MallardDuck

display() { } display() { }

RedheadDuck

Duck

swim()quack()

display()

Page 12: Design Patterns in Luster

Class Diagram

MallardDuck

display() { } display() { }

RedheadDuck

Duck

swim()quack()

display()

Page 13: Design Patterns in Luster
Page 14: Design Patterns in Luster

模擬鴨子,全 改版

讓鴨子飛新

Page 15: Design Patterns in Luster

Page 16: Design Patterns in Luster

MallardDuckdisplay() { }

Duckquack()

display()swim()

RedheadDuckdisplay() { }

Class Diagram

Page 17: Design Patterns in Luster

MallardDuckdisplay() { }

Duckquack()

display()swim()

RedheadDuckdisplay() { }

fly()

Jason’s Class Diagram

Page 18: Design Patterns in Luster

公測那一天

黃色塑膠鴨竟然也會飛了- -|||

Page 19: Design Patterns in Luster
Page 20: Design Patterns in Luster

What’s happened ?

Duckquack()

display()swim()

fly()RubberDuck

quack() { 吱吱叫; }@Override

display() { }

Page 21: Design Patterns in Luster
Page 22: Design Patterns in Luster

Duckquack()

display()swim()

fly()

RubberDuck

display() { }

quack() { 吱吱叫; }@Override

Page 23: Design Patterns in Luster

Jason’s Class Diagram II

Duckquack()

display()swim()

fly()

RubberDuck

quack() { 吱吱叫; }@Override

display() { }

fly() { // Do nothing! }@Override

Page 24: Design Patterns in Luster

FireDuck

quack() { // Do nothing! }@Override

display() { }

fly() { // Do nothing! }@Override

swim() { // Do nothing! }@Override

Page 25: Design Patterns in Luster

A.

B.

C.

D.

E.

F.

Page 26: Design Patterns in Luster

“ ”

“ ”

“ ”

Page 27: Design Patterns in Luster

而且又繼續用繼承的方式,那我豈不是要

Page 28: Design Patterns in Luster

逐鴨審查而且又繼續用繼承的方式,那我豈不是要

Page 29: Design Patterns in Luster

Page 30: Design Patterns in Luster

Duck

display()swim()Flyable

fly()

Quackablequack()

MallardDuck RedheadDuck RubberDuck

Page 31: Design Patterns in Luster

Duck

display()swim()Flyable

fly()

Quackablequack()

MallardDuckdisplay()

RedheadDuckdisplay()

RubberDuckdisplay()

Page 32: Design Patterns in Luster

Duck

display()swim()Flyable

fly()

Quackablequack()

MallardDuck

fly()display()

RedheadDuck

fly()display()

RubberDuckdisplay()

Page 33: Design Patterns in Luster

Duck

display()swim()Flyable

fly()

Quackablequack()

MallardDuck

fly()display()

quack()

RedheadDuck

fly()display()

quack()

RubberDuckdisplay()quack()

Page 34: Design Patterns in Luster

Duck

display()swim()Flyable

fly()

Quackablequack()

MallardDuckdisplay()

RedheadDuckdisplay()

RubberDuckdisplay()

“”

fly()quack()

fly()quack()

quack()

Page 35: Design Patterns in Luster
Page 36: Design Patterns in Luster

設計守則 Design Principle

Page 37: Design Patterns in Luster

1

Page 38: Design Patterns in Luster
Page 39: Design Patterns in Luster
Page 40: Design Patterns in Luster
Page 41: Design Patterns in Luster
Page 42: Design Patterns in Luster
Page 43: Design Patterns in Luster
Page 44: Design Patterns in Luster

1

Page 45: Design Patterns in Luster

2

Page 46: Design Patterns in Luster

Program to an !interface,!

not an implementation.

2

Page 47: Design Patterns in Luster
Page 48: Design Patterns in Luster

Example

Soldierattack()

Sniperattack() {!! snipe();!}snipe()

Stormtrooperattack() {!! shoot();!}shoot()

Page 49: Design Patterns in Luster

Program to an implement

Sniper soldier = new Sniper(); soldier.attack();

Page 50: Design Patterns in Luster

Program to an interface

Sniper soldier = new Sniper(); soldier.attack();

Soldier soldier = new Sniper(); soldier.attack();

Page 51: Design Patterns in Luster

Sniper soldier = new Sniper(); soldier.attack();

Soldier soldier = new Sniper(); soldier.attack();

Soldier soldier = getSoldier(); soldier.attack();

Program to an interface

Page 52: Design Patterns in Luster
Page 53: Design Patterns in Luster

QuackBehaviorquack()

<< interface >>

FlyBehaviorfly()

<< interface >>

Page 54: Design Patterns in Luster

QuackBehaviorquack()

<< interface >>

FlyBehaviorfly()

<< interface >>

Squeakquack() { 吱吱叫; }

MuteQuackquack() { 不會叫; }

Quackquack() { 呱呱叫; }

FlyWithWingsfly() { ⽤用翅膀飛; }

FlyWithRocketfly() { ⽤用⽕火箭飛; }

FlyNoWayfly() { 不會飛; }

Page 55: Design Patterns in Luster

Duck

display()swim()

Page 56: Design Patterns in Luster

Duck

display()swim()

QuackBehavior quackBehaviorFlyBehavior flyBehavior

public abstract class Duck { QuackBehavior quackBehavior; FlyBehavior flyBehavior; }

Page 57: Design Patterns in Luster

Duck

display()swim()

performQuack()performFly()

QuackBehavior quackBehaviorFlyBehavior flyBehavior

public abstract class Duck { QuackBehavior quackBehavior; FlyBehavior flyBehavior; ! public void performQuack() { quackBehavior.quack(); } public void performFly() {…} }

Page 58: Design Patterns in Luster

Duck

display()swim()

performQuack()performFly()

QuackBehavior quackBehaviorFlyBehavior flyBehavior

public abstract class Duck { QuackBehavior quackBehavior; FlyBehavior flyBehavior; ! public void performQuack() { ! } public void performFly() {…} }

quackBehavior.quack();

Page 59: Design Patterns in Luster

public abstract class Duck { QuackBehavior quackBehavior; FlyBehavior flyBehavior; ! public void performQuack() { quackBehavior.quack(); } public void performFly() {…} }

Page 60: Design Patterns in Luster

public abstract class Duck { QuackBehavior quackBehavior; FlyBehavior flyBehavior; ! public void performQuack() { quackBehavior.quack(); } public void performFly() {…} }

public class MallardDuck extends Duck { ! public MallardDuck() { quackBehavior = new Quack(); flyBehavior = new FlyWithNoWings(); } ! public void display() {…} }

Page 61: Design Patterns in Luster
Page 62: Design Patterns in Luster

public class DuckSimulator { ! public static void main(String[] args) { Duck mallard = new MallardDuck(); mallard.performQuack(); } }

Page 63: Design Patterns in Luster

public class DuckSimulator { ! public static void main(String[] args) { Duck mallard = new MallardDuck(); mallard.performQuack(); } }

Page 64: Design Patterns in Luster
Page 65: Design Patterns in Luster

Duck

display()swim()

performQuack()performFly()

QuackBehavior quackBehaviorFlyBehavior flyBehavior

public abstract class Duck { QuackBehavior quackBehavior; FlyBehavior flyBehavior; ! public void performQuack() { quackBehavior.quack(); } public void performFly() {…} !}

Page 66: Design Patterns in Luster

public abstract class Duck { QuackBehavior quackBehavior; FlyBehavior flyBehavior; ! public void performQuack() { quackBehavior.quack(); } public void performFly() {…} !}

Duck

display()swim()

performQuack()performFly()

QuackBehavior quackBehaviorFlyBehavior flyBehavior

setQuackBehavior()setFlyBehavior()

Page 67: Design Patterns in Luster

Duck

display()swim()

performQuack()performFly()

QuackBehavior quackBehaviorFlyBehavior flyBehavior

setQuackBehavior()setFlyBehavior()

public abstract class Duck { QuackBehavior quackBehavior; FlyBehavior flyBehavior; ! public void performQuack() { quackBehavior.quack(); } public void performFly() {…} ! public void setQuackBehavior( QuackBehavior behavior) { this.quackBehavior = behavior; } public void setFlyBehavior… }

Page 68: Design Patterns in Luster
Page 69: Design Patterns in Luster

public class DuckSimulator { ! public static void main(String[] args) { Duck mallard = new MallardDuck(); mallard.performQuack(); mallard.setQuackBehavior(new Squeak()); mallard.performQuack(); } }

Page 70: Design Patterns in Luster

public class DuckSimulator { ! public static void main(String[] args) { Duck mallard = new MallardDuck(); mallard.performQuack(); mallard.setQuackBehavior(new Squeak()); mallard.performQuack(); } }

Page 71: Design Patterns in Luster

public class DuckSimulator { ! public static void main(String[] args) { Duck mallard = new MallardDuck(); mallard.performQuack(); mallard.setQuackBehavior(new Squeak()); mallard.performQuack(); } }

Page 72: Design Patterns in Luster
Page 73: Design Patterns in Luster

QuackBehaviorquack()

<< interface >>

Quackquack() { 呱; }

MuteQuackquack() {}

Squeakquack() { 吱; }

FlyBehaviorfly()

<< interface >>

FlyWithWingsfly() { 拍翅膀; }

FlyNoWayfly() {}

FlyWithRocketfly() { 噴射; }

Page 74: Design Patterns in Luster

Duck QuackBehaviorquack()

<< interface >>

Quackquack() { 呱; }

MuteQuackquack() {}

Squeakquack() { 吱; }

FlyBehaviorfly()

<< interface >>

FlyWithWingsfly() { 拍翅膀; }

FlyNoWayfly() {}

FlyWithRocketfly() { 噴射; }

MallardDuck

display()swim()

RedheadDuck

display()swim()

RubberDuck

display()swim()

Page 75: Design Patterns in Luster

QuackBehaviorquack()

<< interface >>

Quackquack() { 呱; }

MuteQuackquack() {}

Squeakquack() { 吱; }

FlyBehaviorfly()

<< interface >>

FlyWithWingsfly() { 拍翅膀; }

FlyNoWayfly() {}

FlyWithRocketfly() { 噴射; }

MallardDuckdisplay()

RedheadDuckdisplay()

RubberDuckdisplay()

Duck

display()swim()

Page 76: Design Patterns in Luster

Duck

display()swim()

QuackBehavior quackBehaviorFlyBehavior flyBehavior

QuackBehaviorquack()

<< interface >>

Quackquack() { 呱; }

MuteQuackquack() {}

Squeakquack() { 吱; }

FlyBehaviorfly()

<< interface >>

FlyWithWingsfly() { 拍翅膀; }

FlyNoWayfly() {}

FlyWithRocketfly() { 噴射; }

MallardDuckdisplay()

RedheadDuckdisplay()

RubberDuckdisplay()

Page 77: Design Patterns in Luster

Duck

display()swim()

performQuack()performFly()

QuackBehavior quackBehaviorFlyBehavior flyBehavior

QuackBehaviorquack()

<< interface >>

Quackquack() { 呱; }

MuteQuackquack() {}

Squeakquack() { 吱; }

FlyBehaviorfly()

<< interface >>

FlyWithWingsfly() { 拍翅膀; }

FlyNoWayfly() {}

FlyWithRocketfly() { 噴射; }

MallardDuckdisplay()

RedheadDuckdisplay()

RubberDuckdisplay()

Page 78: Design Patterns in Luster

Duck

display()swim()

performQuack()performFly()

QuackBehavior quackBehaviorFlyBehavior flyBehavior

setQuackBehavior()setFlyBehavior()

QuackBehaviorquack()

<< interface >>

Quackquack() { 呱; }

MuteQuackquack() {}

Squeakquack() { 吱; }

FlyBehaviorfly()

<< interface >>

FlyWithWingsfly() { 拍翅膀; }

FlyNoWayfly() {}

FlyWithRocketfly() { 噴射; }

MallardDuckdisplay()

RedheadDuckdisplay()

RubberDuckdisplay()

Page 79: Design Patterns in Luster

Duck

display()swim()

performQuack()performFly()

QuackBehavior quackBehaviorFlyBehavior flyBehavior

setQuackBehavior()setFlyBehavior()

QuackBehaviorquack()

<< interface >>

Quackquack() { 呱; }

MuteQuackquack() {}

Squeakquack() { 吱; }

FlyBehaviorfly()

<< interface >>

FlyWithWingsfly() { 拍翅膀; }

FlyNoWayfly() {}

FlyWithRocketfly() { 噴射; }

MallardDuckdisplay()

RedheadDuckdisplay()

RubberDuckdisplay()

Page 80: Design Patterns in Luster

3

Page 81: Design Patterns in Luster
Page 82: Design Patterns in Luster
Page 83: Design Patterns in Luster
Page 84: Design Patterns in Luster

策略模式 Strategy

Page 85: Design Patterns in Luster

Strategy

Page 86: Design Patterns in Luster

Strategy

Page 87: Design Patterns in Luster

Strategy

Page 88: Design Patterns in Luster

Strategy

Page 89: Design Patterns in Luster

為什麼我們需要學設計模式

Page 90: Design Patterns in Luster

Z > B

Page 91: Design Patterns in Luster

Z > B

Page 92: Design Patterns in Luster
Page 93: Design Patterns in Luster
Page 94: Design Patterns in Luster

Jas

!

Page 95: Design Patterns in Luster
Page 96: Design Patterns in Luster
Page 97: Design Patterns in Luster

結論

Page 98: Design Patterns in Luster

變 化設 計

Page 99: Design Patterns in Luster

ThanksJason Chung