【转载】浅谈 flash 中的设计模式:模版
于是做flash开发的时候要随时惦记着这件事情,时刻想着能不能把现在做的这个东西转换成组件,以及转换成组件只能怎么保证灵活性和通用性。
比如这次做图片上传的插件,里面需要3个标签来切换不同的功能,那么很容易就想到tabBar这个组件,但是flex3有而flash没有,去网上找了会儿没找到(当时居然忘记yahoo flash开发社区了……),想着反正不难,就自己写了。
这个时候就要考虑了,怎样写,这个标签切换才能更加通用呢?首先,不同的地方标签的外观肯定是不同的,功能倒绝对的大同小异,那么就需要外观比较自由的按钮。flash as3开发里面,基本上是将每个外观封装成一个元件,然后绑定到一个类上,使用的时候,实例化这个类,就可以使用由flash ide创建的外观,和as定义的功能了。换言之,在具体应用的时候,我们只需要写一个类,让他具有和组件中标签按钮具有一样的功能,然后替换掉组件中的标签按钮,就可以了。
习惯面向对象编程思维的同学第一反应一定是接口(我就是~),确实,在这种典型的多态特征下,定义接口并且实现接口是一种解决方案。但是这里有一个问题就是这些按钮还有一些公共的业务逻辑,我们当然希望在基类里面包含起来,而接口是不能实现方法的。于是我转而使用设计模式中的“模板方法”。
模板方法是这样的,定义一个不能实例化的抽象类,里面实现了一些公共方法,需要子类重写的方法直接抛出一个异常。使用的时候,用一个类来继承它,并且使用override关键字把需要重写的方法重写一遍,将特殊的方法在特殊类中实现。
简单的代码表述是这样子的:
package{
import flash.display.Sprite;
public class AbstractButton extends Sprite{
public final function init():void{
//这个方法就是实现公用逻辑的方法,使用final关键字来避免被子类改写
}
public function abstractMethod():void{
//抽象方法,只需要抛出一个异常
throw new Error("Abstract Method!");
}
}
}
package{
public class myButton extends AbstractButton{
public override function abstractMethod():void{
//在这里进行复写,以便实现当下的特有逻辑
trace("override abstract method~~");
}
}
}
如此,我们便可以保证公有逻辑统一(改了父类,子类都会得到更改),而子类又保持着相对自由,独立的特性。这便是模板方法。
【转载】浅谈 flash 中的设计模式:模版相关推荐
- 理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式丨C++后端开发丨Linux服务器开发丨web服务器
理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式 1. 开闭.单一职责.里氏替换.接口隔离等设计原则 2. 随处可见的模板方法 3. nginx中核心设计模式 责任链模式 4. 责 ...
- 浅谈Laravel中的设计模式(四) Contract 契约模式
阅读时长:3分钟 技术预备:熟悉Laravel的使用 契约模式(Contract) 一.首先什么是契约模式呢? 学过Java的童鞋一定知道interface.抽象类之类的概念. 主要就是为了具有相同操 ...
- 浅谈spring中的设计模式(转)
工厂模式 BeanFactory,从xml或者注解加载BeanDefinition,然后实例化对象,其中AbstractAutowiredCapableBeanFactory实现了主要的逻辑 单例模式 ...
- 我的FLASH情结2010—— 浅谈FLASH WEB GAME与创业
声明:本文系转载,对原文有删节,出处链接地址 ★目录: →FLASH WEB GAME的系统架构 →FLASH WEB GAME的前端架构与人事分工 →前端与美术的配合 →前端与后端的配合 ===== ...
- [转] 浅谈脱壳中的附加数据问题(overlay)
浅谈脱壳中的附加数据问题(overlay) Author:Lenus From: www.popbase.net E-mail:Lenus_M@163.com -------------------- ...
- 浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别
浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别 标签: caffe深度学习CaffeNet 2016-11-02 16:10 1203人阅读 评论(1) ...
- python中 是什么类型_浅谈python中的变量默认是什么类型
浅谈python中的变量默认是什么类型 1.type(变量名),输出的结果就是变量的类型: 例如 >>> type(6) 2.在Python里面变量在声明时,不需要指定变量的类型,变 ...
- 浅谈数据分析中的“暗物质”
浅谈数据分析中的"暗物质" 我们分析数据,更重要的是看到数据中所隐藏的暗物质,即数据图中你看不见的数据\逻辑\知识. 开门见山,以下是某新闻媒体WAP\APP\PC三端的分周中和周 ...
- 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系
转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...
最新文章
- java swing 列表框_Java开发笔记(一百三十一)Swing的列表框
- 决策树 随机森林 xgboost_一文看懂随机森林-RandomForest(附4个构造步骤+4种实现方式评测+10个优缺点)...
- Safari 快捷键
- Linux基础命令---检查密码文件pwck 1
- 转载--Github优秀java项目集合(中文版) - 涉及java所有的知识体系
- java模仿银行账务业务_一个银行转账业务模型分析:大魏Java记5-7
- java json 合并_java中,怎么把两个jsonObject合并成一个?
- 关于世博会的一些遐想!
- Vue怎么操作父元素、兄弟元素、子元素
- caffe入门学习:caffe.Classifier的使用
- jQuery之浏览器打印插件
- python画三维(3D)图
- ANSYS_APDL在绘制 vonMises(等效)应力云图报错:The requested data S is not available.The PLES command is ignored.
- 英文实体识别stanrdfold
- LSTM长短期记忆网络
- Python:列表去重的两种方法
- 手把手教你做多重线性逐步回归
- 【转载】自抗扰控制器的学习过程
- 易飞9.0.12官方正版安装程序下载地址
- Homebrew工具命令之brew cleanup清理电脑内存