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);
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM