java 工厂模式的两种实现

Thinking in Java(7)

1.1 Java工厂模式(不适用匿名类)

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

public interface ServiceFactory {
	public Service getService();
}

import java.io.*;

class Factory1 implements Service{
	Factory1() {}
	@Override
	public void method1() {
		// TODO Auto-generated method stub
		System.out.println("工厂1生产了1号产品");
	}

	@Override
	public void method2() {
		// TODO Auto-generated method stub
		System.out.println("工厂1生产了2号产品");
	}
}

class Factory1Service implements ServiceFactory {

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

class Factory2 implements Service {

	@Override
	public void method1() {
		// TODO Auto-generated method stub
		System.out.println("工厂2生产了1号产品");
	}

	@Override
	public void method2() {
		// TODO Auto-generated method stub
		System.out.println("工厂2生产了2号产品");
	}
	
}

class Factory2Service implements ServiceFactory {

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

public class Factories1 {
	public static void go(ServiceFactory servicefactory) {
		Service serv = servicefactory.getService();
		serv.method1();
		serv.method2();
	}
	public static void main(String[] args) {
		go(new Factory1Service());
		go(new Factory2Service());
	}
}

1.2 使用匿名类的实现

注意将工厂构造函数设为私有, 个人觉得这种方式很优雅

import java.io.*;

class Factory3 implements Service {
	private Factory3() {}
	@Override
	public void method1() {
		// TODO Auto-generated method stub
		System.out.println("工厂3生产了1号产品");
	}

	@Override
	public void method2() {
		// TODO Auto-generated method stub
		System.out.println("工厂3生产了2号产品");
	}
	public static ServiceFactory factory3 = 
			new ServiceFactory() {
				@Override
				public Service getService() {
					// TODO Auto-generated method stub
					return new Factory3();
				}
			};
}

class Factory4 implements Service {
	private Factory4() {}
	@Override
	public void method1() {
		// TODO Auto-generated method stub
		System.out.println("工厂4生产了1号产品");
	}
	@Override
	public void method2() {
		// TODO Auto-generated method stub
		System.out.println("工厂4生产了2号产品");
	}
	public static ServiceFactory factory4 = 
			new ServiceFactory() {
				@Override
				public Service getService() {
					// TODO Auto-generated method stub
					return new Factory4();
				}
			};
}

public class Factories2 {
	public static void go(ServiceFactory sf) {
		Service serv = sf.getService();
		serv.method1();
		serv.method2();
	}
	public static void main(String[] args) {
		go(Factory3.factory3);
		go(Factory4.factory4);
	}
}

原文地址:https://www.cnblogs.com/xingxing1024/p/7475932.html