Flash AS教程:decorator Pattern
Flash AS教程:decorator Pattern
发布时间:2016-12-21 来源:查字典编辑
摘要:上个星期买了本HeadFirst的《设计模式》,开始学习了设计模式了,感觉颇多。想想我就是拿着脚本语言来编程的,弄那么深奥的干嘛呢,估计是无...

上个星期买了本Head First 的《设计模式》,开始学习了设计模式了,感觉颇多。想想我就是拿着脚本语言来编程的,弄那么深奥的干嘛呢,估计是无聊吧。推荐朋友也看,他说没有空,是啊,现在的年轻人没有一个不忙的。说是让我整理出笔记让他看看。

这本书是针对java 写的。没学过java 不过语法跟flash 的脚本语言as3 还是很相似的。

另外借助于一本 《Advanced.ActionScript.3.with.Design.Patterns》,这个也是设计模式。这两本书的区别主要在于 行文叙事,读head first 那书感觉很有趣无需什么基础,读《Advanced.ActionScript.3.with.Design.Patterns》,感觉没有了,为什么呢?那是英文版的,我英文不好,这也是他们的第二个区别。而我的行文则是用as3 来 实现《设计模式》中的所有模式,基本上谈实现,不谈理解。本人非程序员出身,写的东西不太好理解哦。呵呵。

第一个首先讲的是装饰者模式:(decorator Pattern)

下面的程序代码背景:饮料店卖一些饮料Beverage(如咖啡,茶…),在饮料中可以增加调料(如奶,糖..),使他的味道更可口些,就是说调料是来装饰饮料的。而这一些都要钱才能享受哦。

文件格式基本上是一个类一个文件

//第一个as文件所有饮料包括调料的基类 有一个描述方法 和一个费用方法

package com.dp.decorator {

public class Beverage {

public var description : String = “unkonwn Beverage”;

public function getDescription() : String {

return description;

}

public function cost() : Number {

return 0;

}

}

}

//第二个as 文件继承自饮料,是一种具体的饮料(浓咖啡Espresso) ,所有的调料都可以来装饰它(理论上)。

package com.dp.decorator {

import com.dp.decorator.Beverage;

/**

* @author tkj

*/

public class Espresso extends Beverage {

public function Espresso() {

description = “Espresso”;

}

public override functioncost() : Number {

return 1.99;

}

}

}

//这是第三个as文件继承自饮料,是一种抽象的饮料的调料CondimentDecorator,所有的调料继承自它,(我在实现的时候发现其实所有的调料可以直接继承自饮料也可以。),它的子类们会覆盖它的一切。

package com.dp.decorator {

import com.dp.decorator.Beverage;

/**

* @author tkj

*/

public class CondimentDecorator extends Beverage {

public function CondimentDecorator() {

}

public override function getDescription():String{

return description;

}

}

}

//第四个as文件,是具体的调料mocha(摩卡),它覆盖了上面的调料类,它的构造函数传入的对象就是一个饮料实例。它返回的描述getDescription() 是这个调料的描述和传入的这个实例的描述,它返回的价格cost()是这种调料的价格和传入的实例的价格。有点递归的味道。

package com.dp.decorator {

import com.dp.decorator.Beverage;

import com.dp.decorator.CondimentDecorator;

/**

* @author tkj

*/

public class Mocha extends CondimentDecorator {

publicvar yinliao : Beverage;

public function Mocha(yinliao1 : Beverage) {

this.yinliao = yinliao1;

}

public override functiongetDescription() : String {

return yinliao.getDescription() “.Mocha”;

}

public override function cost() : Number {

return yinliao.cost() 0.20;

}

}

}

//第五个as文件 是另一个调料的子类Soy豆沫跟上一个类似

package com.dp.decorator {

import com.dp.decorator.Beverage;

import com.dp.decorator.CondimentDecorator;

/**

* @author tkj

*/

public class Soy extends CondimentDecorator {

publicvar yinliao : Beverage;

public function Soy(yinliao1 : Beverage) {

this.yinliao = yinliao1;

}

public override functiongetDescription() : String {

return yinliao.getDescription() “.Soy “;

}

public override function cost() : Number {

return yinliao.cost() 0.3;

}

}

}

//第六个类,就是使用上述模式了,介绍看代码内部的注解。

package {

import flash.display.Sprite;

import com.dp.decorator.*;

/**

* @author tkj

*/

public class Dinggou extends Sprite {

public function Dinggou() {

//点一种饮料,注意类型Beverage,这个是在上面所有类中的通行证.一开始没有注意在这里摔了

var yinliao1 : Beverage = new Espresso();

//加点摩卡

yinliao1 = new Mocha(yinliao1);

//再加点摩卡

yinliao1 = new Mocha(yinliao1);

//加点豆沫

yinliao1 = new Soy(yinliao1);

//再加点摩卡(不会还不够吧?要不够还可以再加哦!)

yinliao1 = new Mocha(yinliao1);

//够了,结帐。

trace(yinliao1.getDescription() “$” yinliao1.cost());

}

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Flash教程学习
热门Flash教程学习
网页设计子分类