匿名内部类形参_匿名内部类_如何调用匿名内部类(5)

电脑杂谈  发布时间:2017-02-06 11:18:13  来源:网络整理

}

这样,我们再在方法里实现先排序后打印,代码如下:

public void printSortedArray(int[] is,SortAlgor sa)

{

……

sa.sort(is);

for(int i=0;i<is.length;i++)

{

System.out.print(is[i]+” “);

}

System.out.println();

}

客户端对上面方法的使用如下:

int[] is = new int[]{3,1,4,9,2};

printSortedArray(is,new SortAlgor()

{

public void sort(is)

{

int k = 0;

for(int i=0;i<is.length;i++)

{

for(int j=i+1;j<is.length;j++)

{

if(is[i]>is[j])

{

k = is[i];

is[i] = is[j];

is[j] = k;

}

}

}

}

});

这样的用法很多,我们都或多或少的被动的使用过。如在Swing编程中,我们经常需要对组件增加器对象,如下所示:

spinner2.addChangeListener(new ChangeListener()

{

匿名内部类_如何调用匿名内部类_匿名内部类形参

public void stateChanged(ChangeEvent e)

{

System.out.println("Source: " + e.getSource());

}

}

);

在Arrays包里,对元素为对象的数组的排序:

Arrays.sort(emps,new Comparator(){

Public int compare(Object o1,Object o2)

{

return ((Employee)o1).getServedYears()-((Employee)o2).getServedYears();

}

});

这样的例子还有很多,JDK教会了我们很多使用内部类的方法。随时我们都可以看一看API,看看还会在什么地方使用到内部类呢?

场景之四:适当使用内部类,使得代码更加灵活和富有扩展性

适当的使用内部类,可以使得你的代码更加灵活和富有扩展性。当然,在这里头起作用的还是一些模式的运行,但如果不配以内部类的使用,这些方法的使用效果就差远了。不信?请看下面的例子:

我们记得简单工厂模式的作用就是将客户对各个对象的依赖转移到了工厂类里。很显然,简单工厂模式并没有消除那些依赖,只是简单的将它们转移到了工厂类里。如果有新的对象增加进来,则我们需要修改工厂类。所以我们需要对工厂类做进一步的改造,进一步消除它对具体类的依赖。以前我们提供过一个使用反射来消除依赖的方法;这里,我们将提供另外一种方法。

这种方法是将工厂进一步抽象,而将具体的工厂类交由具体类的创建者来实现,这样,工厂类和具体类的依赖的问题就得到了解决。而工厂的使用者则调用抽象的工厂来获得具体类的对象。如下。

我们以一个生产形体的工厂为例,下面是这些形体的接口:

package polyFactory;

public intece Shape {

public void draw();

public void erase();

}

通过上面的描述,大家都可能已经猜到,这个抽象的工厂肯定使用的是模板方法模式。如下:

package polyFactory;

import java.util.HashMap;

import java.util.Map;

public abstract class ShapeFactory {


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-30869-5.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...