Java 匿名内部类 工厂模式

public interface huhu {//接口,这里是空的,为了测试

}

public class Outter{

     public static final  mm=5;//这里声明了个变量,当然我们的关注点是final,这是因为匿名内部类想使用在其外部定义的对象(Java中万物皆对象),就必须要求参数的引用是final

public huhu info() {//创建一个继承自huhu这个接口的匿名类的对象,通过new表达式返回的引用被自动向上转型为对huhu接口的引用
return new huhu(){

               //匿名内部类肯定没有构造器咯,因为它名字是啥你都不知道
public int here;//包含字段和方法
public void saySomething() {
System.out.println(“hello”);//插桩,让我们知道程序运行到了此处
}
};//标记表达式的结束,而这个表达式包含了匿名内部类
}

     public static void main(String[] args) {

   }

}

为了具体说明其关系,这里详细解释:你新建了一个类并实现了huhu这个接口,最后将其向上转型,得到这个接口的引用。

总结:匿名类可以扩展类,也可以实现其接口(只能一个接口),不能兼而有之

用处:对于一些特殊的类,添加些小功能,而这又不适合以接口和继承方式来实现(杀鸡焉用牛刀对吧) 这样简单优雅

这里附上匿名内部类与工程模式的结合实现:(From Think In Java)

public interface BaseService {
void method1();
void method2();
}

public interface ServiceFactory {
BaseService getService();
}

package com.upcsogo.www;
class Implementation1 implements BaseService {
private Implementation1() {

}


@Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("Implementation1 method1");
}


@Override
public void method2() {
// TODO Auto-generated method stub
System.out.println("Implementation2 method2");
}
public static ServiceFactory factory = new ServiceFactory() {


@Override
public BaseService getService() {
// TODO Auto-generated method stub
return new Implementation1();
}

};

}
class Implementation2 implements BaseService {
private Implementation2 () {

}


@Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("Implementation2 method1");
}


@Override
public void method2() {
// TODO Auto-generated method stub
System.out.println("Implemtation2 method2");
}
public static ServiceFactory factory2 = new ServiceFactory() {


@Override
public BaseService getService() {
// TODO Auto-generated method stub
return new Implementation2();
}

};

}
public class FactoriesHere {


/**
* @param args
*/
public static void serviceConsumer(ServiceFactory fac) {
BaseService bs = fac.getService();
bs.method1();
bs.method2();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
serviceConsumer(Implementation1.factory);
serviceConsumer(Implementation2.factory2);
}


}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值