工作了快两年,经验积累了一点,可是觉得技术也没有什么长进,最近从一个项目中发现原来只有思想性的提高才是真正的提高,以前写的代码只是知道怎么去写,但是并不知道为什么要这么写,或者说还有没有什么更好的办法,于是最近从基础开始,又好好的学了一遍,可是还是有很多的问题,比如说一般的工厂类以及匿名工厂类的比较问题
其中一般工厂类的实现为
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();
}
};
}
}
个人感觉差别不是很大,只是匿名工厂类看起来更加的简洁,而且用匿名工厂类,可以将实现类的构造方法设置为私有的,可是从灵活等角度来说,也感觉不出什么优势,希望高手可以指点一下,做个总结。。。。。。。