设计模式分享3. 普通类 VS 抽象类 VS 接口
普通类 : 就是一般的类
抽象类 : 不能直接被初始化,只提供了部分实现 ,剩下的由子类去实
现。
接口 : 定义了一个规范,每一个实现类按照规范去实现方法。
闭嘴 !
我们都知道
5. 设计模式是什么?
• A design pattern is a general
repeatable solution to a commonly
occurring problem in software design.
• A design pattern is not a finished
design that can be transformed directly
into code.
• Algorithms are not thought of as
design patterns.
7. •需求 1 :
开发一款鸭子游戏,游戏中
会出现各种外观不同的鸭子,这些鸭子
一边游泳,一边呱呱叫。现在知道有绿
头鸭、红头鸭、黄头鸭等等。
8. Duck
-outward
+quack()
+swim()
+display ()
GreenDuck RedDuck YellowDuck OtherDuck
+display() +display() +display()
10. Duck
-outward
+quack()
+swim()
+display ()
+fly()
GreenDuck RedDuck RubberDuck OtherDuck
+display() +display() +display()
11. Duck
-outward
+quack ()
+swim ()
+display ()
+fly()
GreenDuck RedDuck RubberDuck OtherDuck
+display () +display () +display ()
+fly()
+{//什么也
不干}()
12. •需求 3 :
增加一种诱饵鸭,诱饵鸭是
木头假鸭,不会飞又不会叫。
•需求 4 、需求 5 、需求 6 、……需求 N 。 N 种鸭子。
13. <<interface >> <<interface >> Duck
Flyable Quackable
+fly() +quack()
+swim()
+display ()
GreenDuck RubberDuck
DecoyDuck
+swim () +swim()
+display () +display () +swim ()
+fly() +quack () +display ()
+quack ()
14. <<interface >> <<interface >> Duck
Flyable Quackable
+fly() +quack ()
+swim()
+display ()
GreenDuck RubberDuck
DecoyDuck
+swim () +swim()
+display () +display () +swim ()
+fly() +quack () +display ()
+quack ()
16. GaGaQuack ZhiZhiQuack Duck
+gaga() +zhizhi()
GaGaDuck 1 GaGaDuck 48
-GaGaQuack gagaQuack
-GaGaQuack gagaQuack
ZhiZhiDuck 1 ZhiZhiDuck 32
-ZhiZhiQuack zhizhiQuack -ZhiZhiQuack zhizhiQuack
17. <<interface >>
FlyBehavior
+fly()
FlyWithWings FlyNoWay
+fly() +fly()
+{实现鸭子的飞行行为}() +{不会飞,什么也不做}()
<<interface >>
QuackBehavior
+quack ()
GaGaQuack ZhiZhiQuack QuackNoWay
+fly() +fly() +fly()
+{实现鸭子呱呱叫}() +{实现鸭子吱吱叫}() +{不会叫,什么也不做}()
18. Duck
-FlyBehavior flyBeha
-QuackBehavior quackBehavior
+swim ()
+display ()
+getQuack ()
+setQuack ()
+getFly ()
+setFly ()
+//鸭子其它行为()
RedDuck RubberDuck DecoyDuck
+display () +display () +display ()
+{//红头鸭}() +{//橡皮鸭}() +{//诱饵鸭}()
19. 策略模式
定义了算法族,分别封装起来,让它们之间可以相互替
换,此模式让算法的变化独立于使用算法的客户。