ファクトリモード:ファクトリを修正せず、クラスを追加削除するだけで対応するプロファイルを修正すればOK!


最終的な目的は、ファクトリを変更せずに、新しいクラスとプロファイルを追加するだけで、ファクトリがサブクラスオブジェクトを生産できるようにすることです.このような開発構想は私たちの開発過程で随所に見られます.例えば、Spring、Hibernate、Strutsではかなり普遍的に応用されています.この点を理解することは私たちがSSHを学ぶのに非常に便利です.もちろん具体的な使い方は実際のプロジェクトで体験し、最適化する必要があります.詳細については、このPageダウンロードファイル:CarFactory_を参照してください.code.rar

package com.cdl.dp.factory2;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;
import java.util.Scanner;

//  :http://www.blogjava.net/jzgl-ever/archive/2008/07/26/217704.html
//  :interfaceAndFactory.CarFactory
//  :package com.cdl.dp.factory;
interface Car {
	public void run();

	public void stop();
}

class Benz implements Car {
	public void run() {
		System.out.println("Benz     。。。。。");
	}

	public void stop() {
		System.out.println("Benz   。。。。。");
	}
}

class Ford implements Car {
	public void run() {
		System.out.println("Ford     。。。");
	}

	public void stop() {
		System.out.println("Ford   。。。。");
	}
}

class Toyota implements Car {
	public void run() {
		System.out.println("Toyota     。。。");
	}

	public void stop() {
		System.out.println("Toyota   。。。。");
	}
}

//           ,O(∩_∩)O  ~
class Cdliang implements Car {
	public void run() {
		System.out.println("Cdliang     。。。");
	}

	public void stop() {
		System.out.println("Cdliang   。。。。");
	}
}

class BYD implements Car {
	public void run() {
		System.out.println("BYD     。。。");
	}

	public void stop() {
		System.out.println("BYD   。。。。");
	}
}

class ProduceCar {//  carClassPath  ,    car  
	public static Car getCarInstance(String carClassPath) {
		Car c = null;
		try {
			c = (Car) Class.forName(carClassPath).newInstance();
			//           ,path.package.ClassName          
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return c;
	}
}

//      XML    ,               
class InitProperties {
	public static Properties getProperties() {//                    
		Properties pro = new Properties();
		try {
			pro.loadFromXML(new FileInputStream("cdl2.xml"));
		} catch (InvalidPropertiesFormatException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(pro);
		return pro;
	}
}

public class CarFactory {

	public static void main(String[] args) {

		Properties pro = new Properties();
		pro = InitProperties.getProperties();

		System.out.println("         :");
		Scanner sc = new Scanner(System.in);
		String carName = sc.nextLine().trim();

		Car c = ProduceCar.getCarInstance((String) pro.get(carName));
		if (c != null) {//                
			c.run();
			c.stop();
		} else {
			System.out.println("       。。。");
		}
	}

}

    :
{Benz=com.cdl.dp.factory2.Benz, Ford=com.cdl.dp.factory2.Ford, BYD=com.cdl.dp.factory2.BYD, Toyota=com.cdl.dp.factory2.Toyota, Cdliang=com.cdl.dp.factory2.Cdliang}
         :
BYD
BYD     。。。
BYD   。。。。


.