java中一般的工厂类和匿名工厂类的比较

工作了快两年,经验积累了一点,可是觉得技术也没有什么长进,最近从一个项目中发现原来只有思想性的提高才是真正的提高,以前写的代码只是知道怎么去写,但是并不知道为什么要这么写,或者说还有没有什么更好的办法,于是最近从基础开始,又好好的学了一遍,可是还是有很多的问题,比如说一般的工厂类以及匿名工厂类的比较问题

其中一般工厂类的实现为

package com.eric.interfaceAndInnerClass;

public class FactoryPartner {
	public static void main(String[] args) {
		process(new SerivceFactory1());
		process(new SerivceFactory2());
	}
	
	static void process(ServiceFactory serviceFactory) {
		serviceFactory.getService().run();
		serviceFactory.getService().jump();
	}
}

interface Service {
	public void run();
	
	public void jump();
}

interface ServiceFactory {
	Service getService();
}

class Service1 implements Service {
	
	public void run() {
		System.out.println("service1 run...");
		
	}
	
	public void jump() {
		System.out.println("service1 jump...");
		
	}
	
}

class SerivceFactory1 implements ServiceFactory {
	public Service getService() {
		return new Service1();
		
	}
}

class Service2 implements Service {
	
	public void run() {
		System.out.println("service2 run...");
		
	}
	
	public void jump() {
		System.out.println("service2 jump...");
	}
	
}

class SerivceFactory2 implements ServiceFactory {
	public Service getService() {
		return new Service2();
		
	}
}


而用匿名内部类实现的工厂类为

package com.eric.interfaceAndInnerClass;
import com.eric.interfaceAndInnerClass.Service;
 

/**
 * 这个类主要用来说明用匿名内部类实现的工厂模式
 * @author Eric
 *
 */
public class InnerClassFactoryParten {
	public static void main(String[] args) {
		//result is null
		System.out.println(ServiceImplement1.getServiceFactory().getClass().getSimpleName());
		ServiceImplement1.getServiceFactory().getService().run();
		ServiceImplement1.getServiceFactory().getService().jump();
		ServiceImplement2.getServiceFactory().getService().run();
		ServiceImplement2.getServiceFactory().getService().jump();
    }
}

class ServiceImplement1 implements Service{
	private ServiceImplement1(){};

	public void run() {
		System.out.println("service1 run...");
		
	}
	
	public void  jump() {
		System.out.println("service1 jump...");
		
	}
	
	public static  ServiceFactory getServiceFactory(){
		return new ServiceFactory(){
			public Service getService() {
	            return new ServiceImplement1();
            }
			
		};
	}
}

class ServiceImplement2 implements Service{
	private ServiceImplement2(){};

	public void run() {
		System.out.println("service2 run...");
		
	}
	
	public void jump() {
		System.out.println("service2 jump...");
		
	}
	public static ServiceFactory getServiceFactory(){
		return new ServiceFactory(){

			public Service getService() {
	            return new ServiceImplement2();
            }
			
		};
	}
	
}


 

 

 

个人感觉差别不是很大,只是匿名工厂类看起来更加的简洁,而且用匿名工厂类,可以将实现类的构造方法设置为私有的,可是从灵活等角度来说,也感觉不出什么优势,希望高手可以指点一下,做个总结。。。。。。。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值