Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Design Patterns in Luster

Design Patterns in Luster

2014 達暉資訊教育訓練課程 - Design Patterns

課程簡介:
蛇麼!居然可以~

行雲流水般回答何謂 觀察者模式
而不是 我認識它 但無法完整說出它是誰

看完整本 設計模式 書籍
而不是 三秒就倒頭入睡?

寫出 一段段自己滿意程式
而不是 質疑是否有更好寫法

其實 “Design Patterns” 並沒有這麼困難,這次的課程,我們會透過情境的方式,帶大家慢慢走入這個世界~

shiningjason1989

April 19, 2014
Tweet

More Decks by shiningjason1989

Other Decks in Technology

Transcript

  1. Class Diagram MallardDuck display() { } display() { } RedheadDuck

    Duck swim() quack() display() ⭶⭶৙৙ ₇㐤ḑ㚰୏
  2. MallardDuck display() { } ⭶⭶৙৙ ₇㐤ḑ㚰୏ Duck quack() display() swim()

    RedheadDuck display() { } fly() Jason’s Class Diagram
  3. Duck quack() display() swim() fly() RubberDuck display() { } quack()

    { 吱吱叫; } @Override ˼ഌਣᙜ㡲⽾࿩௭ ၂3VCCFS%VDLḝGMZ ᄋ␼ჱ ௭҃ᄋ␼RVBDL ʷᖈ㡧 “ ”
  4. Jason’s Class Diagram II Duck quack() display() swim() fly() RubberDuck

    quack() { 吱吱叫; } @Override display() { } fly() { // Do nothing! } @Override
  5. ਣᏋ̴รְٙӲ 㗚᧾㚼㡲 ᬺˀፚٰ㡲ˀፚ㑞㡲ˀፚᡛ᝼㡲 ⽾ٙፚਣ͹ہ㡺 “ ” FireDuck quack() { // Do

    nothing! } @Override display() { } fly() { // Do nothing! } @Override swim() { // Do nothing! } @Override
  6. Duck display() swim() Flyable fly() Quackable quack() MallardDuck RedheadDuck RubberDuck

    ᨫ˺⽣ӣ ቹচʷ϶୛㐰՟㡲௭㏴⬙ெˀ㌾⬕ḝ⨸ᨫ࿭ ቹচʷ϶ቹ⨸ᨫ㡲௭㏴てቹ௄⬣୛㐰՟㡲 “ ” ⮦⮦բᴫ̣㎁ਣ͹㡺
  7. Duck display() swim() Flyable fly() Quackable quack() MallardDuck display() RedheadDuck

    display() RubberDuck display() ᨫ˺⽣ӣ ቹচʷ϶୛㐰՟㡲௭㏴⬙ெˀ㌾⬕ḝ⨸ᨫ࿭ ቹচʷ϶ቹ⨸ᨫ㡲௭㏴てቹ௄⬣୛㐰՟㡲 “ ” ⮦⮦բᴫ̣㎁ਣ͹㡺
  8. Duck display() swim() Flyable fly() Quackable quack() MallardDuck fly() display()

    RedheadDuck fly() display() RubberDuck display() ᨫ˺⽣ӣ ቹচʷ϶୛㐰՟㡲௭㏴⬙ெˀ㌾⬕ḝ⨸ᨫ࿭ ቹচʷ϶ቹ⨸ᨫ㡲௭㏴てቹ௄⬣୛㐰՟㡲 “ ” ⮦⮦բᴫ̣㎁ਣ͹㡺
  9. Duck display() swim() Flyable fly() Quackable quack() MallardDuck fly() display()

    quack() RedheadDuck fly() display() quack() RubberDuck display() quack() ᨫ˺⽣ӣ ቹচʷ϶୛㐰՟㡲௭㏴⬙ெˀ㌾⬕ḝ⨸ᨫ࿭ ቹচʷ϶ቹ⨸ᨫ㡲௭㏴てቹ௄⬣୛㐰՟㡲 “ ” ⮦⮦բᴫ̣㎁ਣ͹㡺
  10. Duck display() swim() Flyable fly() Quackable quack() MallardDuck display() RedheadDuck

    display() RubberDuck display() ৳ሼ㡲⁼ීᾗて⪹˺ “ ” fly() quack() fly() quack() quack()
  11. Example Soldier attack() Sniper attack() {! ! snipe();! } snipe()

    Stormtrooper attack() {! ! shoot();! } shoot() 4VQFSUZQF٨̨ዅ ၖⲨ㐤Փ࿡̗㍵
  12. Program to an interface Sniper soldier = new Sniper(); soldier.attack();

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

    Sniper(); soldier.attack(); Soldier soldier = getSoldier(); soldier.attack(); #FUUFSTPMVUJPO㡧 ࢡग⨬።㉖㡤ဆႍஂவⶻḑᬳ̲ Program to an interface
  14. ḗ⒅⨸ᨫ 㑞⨸⨸ᨫ QuackBehavior quack() << interface >> FlyBehavior fly() <<

    interface >> Squeak quack() { 吱吱叫; } MuteQuack quack() { 不會叫; } Quack quack() { 呱呱叫; } FlyWithWings fly() { ⽤用翅膀飛; } FlyWithRocket fly() { ⽤用⽕火箭飛; } FlyNoWay fly() { 不會飛; }
  15. Duck display() swim() QuackBehavior quackBehavior FlyBehavior flyBehavior ḗ⒅⨸ᨫ 㑞⨸⨸ᨫ public

    abstract class Duck { QuackBehavior quackBehavior; FlyBehavior flyBehavior; }
  16. Duck display() swim() performQuack() performFly() QuackBehavior quackBehavior FlyBehavior flyBehavior ḗ⒅⨸ᨫ

    㑞⨸⨸ᨫ public abstract class Duck { QuackBehavior quackBehavior; FlyBehavior flyBehavior; ! public void performQuack() { quackBehavior.quack(); } public void performFly() {…} }
  17. Duck display() swim() performQuack() performFly() QuackBehavior quackBehavior FlyBehavior flyBehavior ḗ⒅⨸ᨫ

    㑞⨸⨸ᨫ public abstract class Duck { QuackBehavior quackBehavior; FlyBehavior flyBehavior; ! public void performQuack() { ! } public void performFly() {…} } quackBehavior.quack(); ㊕㆕ࢭኁ㡲 㚼୛ᱞࢭፚ௕୾ḝ⨸ᨫ㡲 ਫ਼ឳ㡮EFMFHBUF㡯⊸՟̘⢱ᱥ㡲 ⑉ˀዑ௕୾எ⏻ࢭ▅ഋ࿭୛㐰՟⪠㡧
  18. public abstract class Duck { QuackBehavior quackBehavior; FlyBehavior flyBehavior; !

    public void performQuack() { quackBehavior.quack(); } public void performFly() {…} } ⽾ਣ͹⮀எ㚼୛⨸ᨫḝ ு㕾ⲇቒ㡺
  19. 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() {…} } ࢭ୛㐰՟ḝෆᕌී⪠
  20. public class DuckSimulator { ! public static void main(String[] args)

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

    { Duck mallard = new MallardDuck(); mallard.performQuack(); } } ۃ
  22. Duck display() swim() performQuack() performFly() QuackBehavior quackBehavior FlyBehavior flyBehavior public

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

    public void performQuack() { quackBehavior.quack(); } public void performFly() {…} ! } Duck display() swim() performQuack() performFly() QuackBehavior quackBehavior FlyBehavior flyBehavior setQuackBehavior() setFlyBehavior()
  24. Duck display() swim() performQuack() performFly() QuackBehavior quackBehavior FlyBehavior 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… }
  25. public class DuckSimulator { ! public static void main(String[] args)

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

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

    { Duck mallard = new MallardDuck(); mallard.performQuack(); mallard.setQuackBehavior(new Squeak()); mallard.performQuack(); } } ڛ
  28. QuackBehavior quack() << interface >> Quack quack() { 呱; }

    MuteQuack quack() {} Squeak quack() { 吱; } FlyBehavior fly() << interface >> FlyWithWings fly() { 拍翅膀; } FlyNoWay fly() {} FlyWithRocket fly() { 噴射; } ௅⪑㚰୏⨬᨟
  29. Duck QuackBehavior quack() << interface >> Quack quack() { 呱;

    } MuteQuack quack() {} Squeak quack() { 吱; } FlyBehavior fly() << interface >> FlyWithWings fly() { 拍翅膀; } FlyNoWay fly() {} FlyWithRocket fly() { 噴射; } MallardDuck display() swim() RedheadDuck display() swim() RubberDuck display() swim()
  30. QuackBehavior quack() << interface >> Quack quack() { 呱; }

    MuteQuack quack() {} Squeak quack() { 吱; } FlyBehavior fly() << interface >> FlyWithWings fly() { 拍翅膀; } FlyNoWay fly() {} FlyWithRocket fly() { 噴射; } MallardDuck display() RedheadDuck display() RubberDuck display() Duck display() swim() ʫ▪ש
  31. Duck display() swim() QuackBehavior quackBehavior FlyBehavior flyBehavior QuackBehavior quack() <<

    interface >> Quack quack() { 呱; } MuteQuack quack() {} Squeak quack() { 吱; } FlyBehavior fly() << interface >> FlyWithWings fly() { 拍翅膀; } FlyNoWay fly() {} FlyWithRocket fly() { 噴射; } MallardDuck display() RedheadDuck display() RubberDuck display()
  32. Duck display() swim() performQuack() performFly() QuackBehavior quackBehavior FlyBehavior flyBehavior QuackBehavior

    quack() << interface >> Quack quack() { 呱; } MuteQuack quack() {} Squeak quack() { 吱; } FlyBehavior fly() << interface >> FlyWithWings fly() { 拍翅膀; } FlyNoWay fly() {} FlyWithRocket fly() { 噴射; } ੒ឧ EFMFHBUF MallardDuck display() RedheadDuck display() RubberDuck display()
  33. Duck display() swim() performQuack() performFly() QuackBehavior quackBehavior FlyBehavior flyBehavior setQuackBehavior()

    setFlyBehavior() QuackBehavior quack() << interface >> Quack quack() { 呱; } MuteQuack quack() {} Squeak quack() { 吱; } FlyBehavior fly() << interface >> FlyWithWings fly() { 拍翅膀; } FlyNoWay fly() {} FlyWithRocket fly() { 噴射; } ּཌྷ⭴ஂ MallardDuck display() RedheadDuck display() RubberDuck display()
  34. Duck display() swim() performQuack() performFly() QuackBehavior quackBehavior FlyBehavior flyBehavior setQuackBehavior()

    setFlyBehavior() QuackBehavior quack() << interface >> Quack quack() { 呱; } MuteQuack quack() {} Squeak quack() { 吱; } FlyBehavior fly() << interface >> FlyWithWings fly() { 拍翅膀; } FlyNoWay fly() {} FlyWithRocket fly() { 噴射; } *4" )"4" *.1-&.&/5 MallardDuck display() RedheadDuck display() RubberDuck display()