1.设计模式入门(Head First 设计模式复习笔记)
2017-11-14 17:04
459 查看
一、设计原则
找出应用中可能变化的,把他们独立起来不要和那些不需要独立的代码混在一起。
针对接口编程,而不是针对实现编程
多用组合,少用继承
二、策略模式
定义算法族分别封装起来,让他们之间可以互相替换,此模式让算法的模式独立于使用算法的客户。
三、模拟鸭子应用
需求:上班的公司要求模拟一个鸭子Duck的游戏,鸭子已知的有MallHardDuck、ReadHeadDuck、RubberDuck等(以后可能加入DecoyDuck
),鸭子都有display、swim、有的鸭子会fly,各种鸭子quack不同。后期橡皮鸭也可能加上飞翔,或者改变其飞翔方法。
策略模式实现:
1.1关系图(实际名称为准)
三、练习:
设计一个游戏,角色有Queen、King、Troll、Knight,他们可以使用武器KnifeBehavior、BowAndArrowBehavior、AxeBehavior、SwordBehavior,游戏中各个角色都可以更换新的武器道具。
找出应用中可能变化的,把他们独立起来不要和那些不需要独立的代码混在一起。
针对接口编程,而不是针对实现编程
多用组合,少用继承
二、策略模式
定义算法族分别封装起来,让他们之间可以互相替换,此模式让算法的模式独立于使用算法的客户。
三、模拟鸭子应用
需求:上班的公司要求模拟一个鸭子Duck的游戏,鸭子已知的有MallHardDuck、ReadHeadDuck、RubberDuck等(以后可能加入DecoyDuck
),鸭子都有display、swim、有的鸭子会fly,各种鸭子quack不同。后期橡皮鸭也可能加上飞翔,或者改变其飞翔方法。
策略模式实现:
1.1关系图(实际名称为准)
1 public interface IFlyBehavior 2 { 3 void fly(); 4 } 5 6 public class FlyWithWings : IFlyBehavior 7 { 8 public void fly() 9 { 10 Console.WriteLine("duck normal fly"); 11 } 12 } 13 14 public class FlyNoWay : IFlyBehavior 15 { 16 public void fly() 17 { 18 Console.WriteLine("duck no fly"); 19 } 20 } 21 22 public interface IQuackBehavior 23 { 24 void quack(); 25 } 26 27 public class Quack : IQuackBehavior 28 { 29 public void quack() 30 { 31 Console.WriteLine("duck normal quack guagua"); 32 } 33 } 34 35 public class Squeack : IQuackBehavior 36 { 37 public void quack() 38 { 39 Console.WriteLine("duck normal quack zhizhi"); 40 } 41 } 42 43 public class MuteQuack : IQuackBehavior 44 { 45 public void quack() 46 { 47 Console.WriteLine("duck no quack"); 48 } 49 } 50 51 public abstract class Duck 52 { 53 public IFlyBehavior flyBehavior; 54 public IQuackBehavior quackBehavior; 55 56 public abstract void Display(); 57 public abstract void Swim(); 58 59 public void perFormFly() { 60 flyBehavior.fly(); 61 } 62 63 public void perFormQuack() { 64 quackBehavior.quack(); 65 } 66 67 public void setFlyBehavior(IFlyBehavior iflyable) { 68 flyBehavior = iflyable; 69 } 70 71 public void setQuackBehavior(IQuackBehavior iquackable) { 72 quackBehavior = iquackable; 73 } 74 }
1 public class MallHardDuck : Duck 2 { 3 public MallHardDuck() 4 { 5 flyBehavior = new FlyWithWings(); 6 quackBehavior = new Quack(); 7 } 8 public override void Display() 9 { 10 Console.WriteLine("Display-MallHardDuck"); 11 } 12 13 public override void Swim() 14 { 15 Console.WriteLine("Swim-MallHardDuck"); 16 } 17 } 18 19 public class ReadHeadDuck: Duck 20 { 21 public ReadHeadDuck() { 22 flyBehavior = new FlyWithWings(); 23 quackBehavior = new Squeak(); 24 } 25 26 public override void Display() 27 { 28 Console.WriteLine("Display-ReadHeadDuck"); 29 } 30 31 public override void Swim() 32 { 33 Console.WriteLine("Swim-ReadHeadDuck"); 34 } 35 } 36 37 public class RubberDuck : Duck 38 { 39 public RubberDuck() { 40 flyBehavior = new FlyNoWay(); 41 quackBehavior = new NoQuack(); 42 } 43 44 public override void Display() 45 { 46 Console.WriteLine("Display-RubberDuck"); 47 } 48 49 public override void Swim() 50 { 51 Console.WriteLine("Swim-RubberDuck"); 52 } 53 }
1 public class RockFly : IFlyBehavior 2 { 3 public void fly() 4 { 5 Console.WriteLine("dock flly by rock"); 6 } 7 }
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Console.WriteLine("生产一个MallHardDuck:"); 6 Duck mallHardDuck = new MallHardDuck(); 7 mallHardDuck.Display(); 8 mallHardDuck.Swim(); 9 mallHardDuck.perFormFly(); 10 mallHardDuck.perFormQuack(); 11 12 Console.WriteLine("生产一个ReadHeadDuck:"); 13 Duck readHeadDuck = new ReadHeadDuck(); 14 readHeadDuck.Display(); 15 readHeadDuck.Swim(); 16 readHeadDuck.perFormFly(); 17 readHeadDuck.perFormQuack(); 18 19 Console.WriteLine("生产一个RubberDuck:"); 20 Duck rubberdDuck = new RubberDuck(); 21 rubberdDuck.Display(); 22 rubberdDuck.Swim(); 23 rubberdDuck.perFormFly(); 24 rubberdDuck.perFormQuack(); 25 Console.WriteLine("为RubberDuck加一个飞行器:"); 26 rubberdDuck.setFlyBehavior(new RockFly()); 27 rubberdDuck.perFormFly(); 28 Console.WriteLine("让RubberDuck正常发声:"); 29 rubberdDuck.setQuackBehavior(new Quack()); 30 Console.Read(); 31 } 32 }
三、练习:
设计一个游戏,角色有Queen、King、Troll、Knight,他们可以使用武器KnifeBehavior、BowAndArrowBehavior、AxeBehavior、SwordBehavior,游戏中各个角色都可以更换新的武器道具。
1 public interface IWeaponBehavior 2 { 3 void useWeapon(); 4 } 5 6 public class KnifeBehavior : IWeaponBehavior 7 { 8 public void useWeapon() 9 { 10 Console.WriteLine("use Weapon Knife "); 11 } 12 } 13 14 public class BowAndArrowBehavior : IWeaponBehavior 15 { 16 public void useWeapon() 17 { 18 Console.WriteLine("use Weapon BowAndArrow "); 19 } 20 } 21 22 public class AxeBehavior : IWeaponBehavior 23 { 24 public void useWeapon() 25 { 26 Console.WriteLine("use Weapon Axe "); 27 } 28 } 29 30 public class SwordBehavior : IWeaponBehavior 31 { 32 public void useWeapon() 33 { 34 Console.WriteLine("use Weapon Sword "); 35 } 36 } 37 38 public class Character 39 { 40 public IWeaponBehavior weaponBehavior; 41 public void fight() { 42 weaponBehavior.useWeapon(); 43 } 44 45 public void setWeapon(IWeaponBehavior _weaponBehavior) { 46 weaponBehavior = _weaponBehavior; 47 } 48 } 49 50 public class Queen : Character 51 { 52 public Queen() { 53 weaponBehavior = new KnifeBehavior(); 54 } 55 } 56 public class King : Character 57 { 58 public King() 59 { 60 weaponBehavior = new BowAndArrowBehavior(); 61 } 62 } 63 public class Troll : Character 64 { 65 public Troll() 66 { 67 weaponBehavior = new AxeBehavior(); 68 } 69 } 70 public class Knight : Character 71 { 72 public Knight() 73 { 74 weaponBehavior = new SwordBehavior(); 75 } 76 } 77 78 class Program 79 { 80 static void Main(string[] args) 81 { 82 Console.WriteLine("创建一个Queen:"); 83 Character Queen = new Queen(); 84 Queen.fight(); 85 86 Console.WriteLine("创建一个King:"); 87 Character King = new King(); 88 King.fight(); 89 90 Console.WriteLine("创建一个Troll:"); 91 Character Troll = new Troll(); 92 Troll.fight(); 93 94 Console.WriteLine("创建一个Knight:"); 95 Character Knight = new Knight(); 96 Knight.fight(); 97 Console.WriteLine("Knight使用了新武器BowAndArrowBehavior:"); 98 Knight.setWeapon(new BowAndArrowBehavior()); 99 Knight.fight(); 100 Console.Read(); 101 } 102 }
相关文章推荐
- 3.装饰者模式(Head First 设计模式复习笔记)
- 2.观察者observe模式(Head First 设计模式复习笔记)
- 单件(单例)模式(Head First 设计模式复习笔记)
- 《Head First 设计模式》学习笔记一:设计模式入门
- Head First 设计模式笔记--入门
- 设计模式复习笔记 (2)创建型模式:简单工厂模式
- Head First设计模式学习笔记-------(1)策略模式
- 自学与复习设计模式笔记(14)责任链模式
- (Head First 设计模式)学习笔记(3) --装饰者模式(StarBuzz咖啡店实例)
- 《Head First 设计模式》阅读笔记 (零)
- Appium+Python+PO 设计模式 入门笔记
- Head First 设计模式第二章 ----observer模式笔记
- 自学与复习设计模式笔记(15)命令模式
- 设计模式笔记之一:MVP架构模式入门(转)
- 《Head First 设计模式》阅读笔记 (零)
- Head First 设计模式学习笔记(2)--观察者模式
- 自学与复习设计模式笔记(16)解释器模式
- Head First 设计模式学习笔记 —— 适配器模式
- head first 设计模式 模板模式笔记
- 《Head First 设计模式》学习笔记