`
luhantu
  • 浏览: 204555 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
文章列表
大家假想一下如果,你的类要继承一个类,还要实现一个接口,可是你发觉你继承的类和接口里面有两个同名的方法怎么办?你怎么区分它们??这就需要我们的内部类了。看下面的代码  InterfaceTest: package com.mode.infa; public interface InterfaceTest { public void test(); }  DuplicateFunction: package com.mode; public class DuplicateFunction{ public void test() { System.out ...
内部类可以使java也有用多继承的特点,这个特点非常重要,个人认为它是内部类存在的最大理由之一,正是由于他的存在使得Java的继承机制更加完善。   大家都知道Java只能继承一个类,它的多重继承在我们没有学习内部类之前是用接口来实现的。但使用接口有时候有很多不方便的地方。比如我们实现一个接口就必须实现它里面的所有方法。而有了内部类就不一样了。它可以使我们的类继承多个具体类或抽象类。大家看下面的例子。  RunClass: package com.mode; public class RunClass { public void run() { System.out.p ...
对于隐藏性来说,平时我们对类的访问权限,都是通过类前面的访问修饰符来限制的,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以,所以我们能通过内部类来隐藏我们的信息。可以看下面的例子  Interfa ...
1.定义 放在一个类的内部的类我们就叫内部类。 2.作用 a.内部类可以很好的实现隐藏,也就是封装性。一般的非内部类,是不允许有 private 与protected权限的,但内部类可以 例子 b.内部类拥有外围类的所有元素的访问权限 例子 c.可是实现多重继承 例子 d.可以避免修改接口而实现同一个类中两种同名方法的调用 例子 3.种类 1)静态内部类 它相当于外部类的静态成员一样,使用static修饰的内部类,它隶属于外部类,使用起来相当于一个独立的外部类。 2)成员内部类 它相当于外部类普通的成员一样,隶属于外部类的具体对象,在定义它的时候,需要先创建外部类对象,再创 ...
门面模式个人觉得这个词起得非常形象化。门面嘛也就是一个窗口,对外隐藏子系统的操作,让你可以只能一个窗口打交道就成了。 打个比方,你把饭喂到肚子里,那么多负责的步骤帮你消化分解排泄你都不用操心了,对外接口就一张嘴,给我嘴打打交道就成了,多省事。要不然你吃完饭还要开动胃帮你消化,开动肠子帮你吸收,开动xx帮你拉拉,那你一天还用不用干活了? 神马?这个跟代理模式有点像?好吧,代理模式也是隐藏实现细节并帮你做一些额外的服务,但是代理模式是你至少的知道你想找谁提供服务,只是你不想找或者找他比较麻烦。但是门面模式是直接把子系统的内容隐藏了,你都不知道门面后面都要访问谁,怎么去访问。   门面模式 ...
策略模式就是定义了算法家族,分别封装起来,让它们之间可以互相替换。 此模式让算法的变化,不会影响到使用算法的客户。也就是把一系列的算法抽象出来做一个基类,实际的算法继承次基类分别实现。在使用时,可以随意使用这些真正的算法实例。 UML类图示例: 这个模式涉及到三个角色:   ●  环境(Context)角色:持有一个Strategy的引用。   ●  抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。   ●  具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。 缺点:客户端必须知道所有 ...
  Flex的动画效果由一个工厂类(Factory)和一个实例类(Instance)构成。   工厂类用来处理事件、控制动画,它的名称就是效果的名称,如Zoom。 实例类则用来实现动画效果,如ZoomInstance。   通常我们在应用程序中创建一个工厂类的实例,设置必要的参数,然后将该实例与触发器关联。当触发器被触发或调用play()方法时,实例去播放所需效果,执行结束后,该实例会被销毁,如果一个效果对应多个目标对象,每一个目标对象都会有一个自己的实例。   实例类的命名规则为效果名+Instance。如之前定义的工厂类名为Zoom,那么实例类名就是ZoomInsta ...
Flex的绑定机制也是一个亮点,对于数据和显示分离提供很好的支持。在Flex绑定分为xml 绑定和纯As绑定。 这里不讲原理只讲用法,欲了解原理可以查看adobe官方文档,非常详细。 BindingUtils 其实是对ChangeWatcher的一个封装类,可以参考BindingUtils的两个方法的源码。 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" ...
对于基本类型,无所谓深浅复制。 深浅复制只要是对于引用类型来说的。一句话概括来说就是:引用类型是否指向了新的内存地址。 例如对于数组来说,因为数组不是类型化数组,所以你可以往数组里面放置基本类型数据和引用类型数据,对于包含引用类型的数据的数组,讨论才有意义。   var array:Array = [1,2,3,{name:"kenny"}]; var shallowCopyArray:Array = array.concat(); var cloneArray:Array = ObjectUtil.clone(array) as Array;  对于浅复制, ...
这几天做项目重构,发现一个蹊跷的问题,A类基础B类,本来不应该基础B中的Xml定义的原件的,但是却发现继承了!最重要的是我A类还需要添加B类,这样导致B类的内容出现两次,而且仅仅是states状态下B的那个组件出现了!刚开始怎么也想不明白怎么会出现两次,知道一步步调试才发现原来是States在搞怪。 当你在Flex的Application或者自定义控件中设置了States属性后,等到控件初始化时,States数组中包的State对象中有个overrides的属性,它里面就包含了这个状态下的所有要显示的对象(包括组件,style等)。所以如果你继承了B,你就继承了B的States数组,你初始 ...
代理模式和装饰器模式虽然概念上区别很大,但是在实现时却又比较相似。 代理模式从概念上讲,就是我想访问一个服务,但是我却不需要知道真正给我提供服务的对象,我只要访问能提供给我服务的代理对象就可以了。 装饰器模式从概念上讲,就是要装饰一个对象,只要把这个对象通过装饰器的构造函数传入,装饰器会做一些额外的装饰。因为装饰器也实现了对象实现的接口,所以就可以像操作对象一样操作装饰器。 代理模式的类图: Interface Subject:   package com.mode.interfaces { public interface Subject { fun ...
对于Flex4来讲,可以自定义skin,然后就可以做出来很漂亮的网格背景。 APP: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" ...
在Flex中可以通过Loader和SWFLoader来进行swf和图像文件的加载。但是两者又有一些不同。   1.  Loader继承自Loader->DisplayObjectContainer-> InteractiveObject ->DisplayObject,但Loader 类会覆盖其继承的以下方法,因为 Loader 对象只能有一个 ...
如果要说这个已经是一个非常长的篇幅,网上七零八落的介绍也非常多,我在也不会多说,如果想了解,可以参考LoaderContext 的applicationDomain的介绍,讲解的也蛮详细的。如果还是不太明白,在网上发现一篇讲的蛮不错的文章,大家可以看看:深入理解Flash的沙箱 – Application Domains。这里面讲的非常详细,希望对大家能有所帮助。 我在这里要做的是对以上这些理论的验证,把他们放到不同的applicationDomain下来测试。大家可以把代码拿下来改变一下看看有何效果。 <?xml version="1.0" encoding= ...
Flex提供了两种方法截图,一个是BitmapData的draw 方法,另一个是ImageSnapshot 提供的captureImage和captureBitmapData静态方法,其实这两种方法没有什么本质的区别,因为ImageSnapshot提供的这些方法本质上也是通过BitmapData的draw方法来截图的。 如果非要要说有什么区别的话,那就是ImageSnapShot提供的这些方法你没有办法设置要截取多大,它会自动根据你传入的对象来算长宽。而BitmapData你可以再创建的时候指定长宽,那样你就可以截图想要的长宽了。 下面的例子是我做的一些测试代码,仅供参考。 <?x ...
Global site tag (gtag.js) - Google Analytics