《大话设计模式》——附录A 封装、继承、多态
对于不是纯软件开发出身的Flasher,什么是设计模式,什么是OOP编程,简直就是一头雾水。但每每回头看自己写的一坨坨“屎”一样的代码,心都碎了,是应该是时候要改变了。
从网上搜索了一下资源,买了本程杰的《大话设计模式》,粗看了一篇感觉很不错,通过故事讲述程序如何设计的,使高深的OOP编程思想变得通俗易懂,是对于苦恼、困惑的oop编程初学者的救星啊。虽然里面的代码是C#版本的,但基本思想也是能看明白的。我也打算将书中C#代码改为AS3,正如书中作者所建议读者多自己动手练习。
仅供参考
A6封装、A7继承、A8多态
Main
1 package { 2 import flash.display.Sprite; 3 4 public class Main extends Sprite{ 5 public function Main(){ 6 var cat:Cat=new Cat(); 7 cat.shoutNum =4; 8 trace(cat.Shout()); 9 10 var dog:Dog = new Dog(); 11 dog.shoutNum = 5; 12 trace(dog.Shout()); 13 } 14 } 15 }
Animal
1 package { 2 public class Animal { 3 protected var name:String = ""; 4 protected var _shoutNum:uint = 3; 5 6 /** 7 * AS3不支持重载,通过“...args”关键字实现,分析args的内容来判断执行不同的分支。 8 * @param args 9 * 10 */ 11 public function Animal(){ 12 13 } 14 15 protected function setName(...args):void{ 16 if(args.length == 0){ 17 this.name = "无名" 18 }else if (args.length ==1){ 19 this.name = args[0]; 20 }else { 21 trace("参数长度大于1") 22 } 23 } 24 25 public function Shout():String{ 26 var result:String = ""; 27 for(var i:uint=0; i < _shoutNum; i++){ 28 result += getShoutSound(); 29 } 30 return "我的名字叫" + this.name + result; 31 } 32 33 public function getShoutSound():String{ 34 return ""; 35 } 36 37 public function get shoutNum():uint{ 38 return _shoutNum; 39 } 40 41 public function set shoutNum(value:uint):void{ 42 if(value <= 10){ 43 _shoutNum = value; 44 } 45 else{ 46 _shoutNum = 10; 47 } 48 } 49 } 50 }
Cat
1 package { 2 public class Cat extends Animal{ 3 4 public function Cat(...args){ 5 super.setName(args); 6 } 7 8 public override function getShoutSound():String{ 9 return "喵"; 10 } 11 } 12 }
Dog
1 package { 2 3 public class Dog extends Animal{ 4 public function Dog(...args){ 5 super.setName(args); 6 } 7 8 public override function getShoutSound():String{ 9 return "汪"; 10 } 11 } 12 }