文章来之:http://blog.zol.com.cn/822/article_821479.html
我们开发过程中肯定会希望这次做的东西下次还能用,于是我们提出了面向对象的开发方法,就是把开发过程当中的东西对象化、抽象化、功能化,这样以后就再用也很容易。对于flash开发而言,macromedia(现在是adobe)提供了一种更简单的方法:组件。

于是做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 中的设计模式:模版相关推荐

  1. 理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式丨C++后端开发丨Linux服务器开发丨web服务器

    理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式 1. 开闭.单一职责.里氏替换.接口隔离等设计原则 2. 随处可见的模板方法 3. nginx中核心设计模式 责任链模式 4. 责 ...

  2. 浅谈Laravel中的设计模式(四) Contract 契约模式

    阅读时长:3分钟 技术预备:熟悉Laravel的使用 契约模式(Contract) 一.首先什么是契约模式呢? 学过Java的童鞋一定知道interface.抽象类之类的概念. 主要就是为了具有相同操 ...

  3. 浅谈spring中的设计模式(转)

    工厂模式 BeanFactory,从xml或者注解加载BeanDefinition,然后实例化对象,其中AbstractAutowiredCapableBeanFactory实现了主要的逻辑 单例模式 ...

  4. 我的FLASH情结2010—— 浅谈FLASH WEB GAME与创业

    声明:本文系转载,对原文有删节,出处链接地址 ★目录: →FLASH WEB GAME的系统架构 →FLASH WEB GAME的前端架构与人事分工 →前端与美术的配合 →前端与后端的配合 ===== ...

  5. [转] 浅谈脱壳中的附加数据问题(overlay)

    浅谈脱壳中的附加数据问题(overlay) Author:Lenus From: www.popbase.net E-mail:Lenus_M@163.com -------------------- ...

  6. 浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别

    浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别 标签: caffe深度学习CaffeNet 2016-11-02 16:10 1203人阅读 评论(1) ...

  7. python中 是什么类型_浅谈python中的变量默认是什么类型

    浅谈python中的变量默认是什么类型 1.type(变量名),输出的结果就是变量的类型: 例如 >>> type(6) 2.在Python里面变量在声明时,不需要指定变量的类型,变 ...

  8. 浅谈数据分析中的“暗物质”

    浅谈数据分析中的"暗物质" 我们分析数据,更重要的是看到数据中所隐藏的暗物质,即数据图中你看不见的数据\逻辑\知识. 开门见山,以下是某新闻媒体WAP\APP\PC三端的分周中和周 ...

  9. 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系

    转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...

最新文章

  1. java swing 列表框_Java开发笔记(一百三十一)Swing的列表框
  2. 决策树 随机森林 xgboost_一文看懂随机森林-RandomForest(附4个构造步骤+4种实现方式评测+10个优缺点)...
  3. Safari 快捷键
  4. Linux基础命令---检查密码文件pwck 1
  5. 转载--Github优秀java项目集合(中文版) - 涉及java所有的知识体系
  6. java模仿银行账务业务_一个银行转账业务模型分析:大魏Java记5-7
  7. java json 合并_java中,怎么把两个jsonObject合并成一个?
  8. 关于世博会的一些遐想!
  9. Vue怎么操作父元素、兄弟元素、子元素
  10. caffe入门学习:caffe.Classifier的使用
  11. jQuery之浏览器打印插件
  12. python画三维(3D)图
  13. ANSYS_APDL在绘制 vonMises(等效)应力云图报错:The requested data S is not available.The PLES command is ignored.
  14. 英文实体识别stanrdfold
  15. LSTM长短期记忆网络
  16. Python:列表去重的两种方法
  17. 手把手教你做多重线性逐步回归
  18. 【转载】自抗扰控制器的学习过程
  19. 易飞9.0.12官方正版安装程序下载地址
  20. Homebrew工具命令之brew cleanup清理电脑内存

热门文章

  1. 2021年高考防骗预警,6大骗局,防骗指南,考生、家长请注意
  2. 臭氧味道虽“臭”,架不住它功能强大
  3. 计算机图形学——直线扫描转换(中点Bresenham扫描转换算法)
  4. 树形控件--zTree 很好很强大
  5. Linux如何快速删除大量文件
  6. 动力节点-Servlet-JSP课堂笔记
  7. 线下门店互动营销产品浅析
  8. 为了远方的爱-2016年东方红公益基金捐赠致辞
  9. 如何用C#创建Windows Service
  10. 【转载】Amit’s A star Page 中译文