java Factory Method z globalnymi ustawieniami

0

Witam
Chcąc pisać dobre wzorce zastanawiam się czy takie rozwiązanie ma sens.

Mam sobie interfejs :

pulic interface Creator<K> {
 	K create();
}
 

Oraz mam kilka obiektów które implementują ten kreator, oraz fabrykę:

public class CrearorFactories {
 
	public final ConfObject globalConf;
	
	public final boolean useDifferentLocation;

	public CreatorFactoris(){
		//ustawienie globalConf
		//oraz useDifferentLocation
	}

	pulbic CreatorFactories(ConfObject object, boolean dif){
		globalConf = glogalConf;
		useDifferendLocation = dif;
	}

	public <T> T create(Creator<T> creator){
		return creator.create;
	}
}

 

Problem polega na tym, że przy kreowaniu niektóre obiekty mogą mieć własne ustawienia konfiguracyjne natomiast te które nie posiadają mogą skorzystać z ustawień globalnych.

Przykład użycia mojej fabryki byłby następujący


private CrearorFactories  factory = new CreatorFactories(conf, false);

Human h = factory.create(new HumanCreator(factory.config));
Robot r = factory.crate(new RobotCreator(factory.useDifferentLocation));

Nie wiem czy coś takiego jest poprawne aby fabryka posiadała pewne globalne konfiguracje ??

0

Pola statyczne?

public class ConcreteCreator implements Creator<ConcreteObject> { 

private static CreatorConfig globalConfig= new CreatorConfig();
private CreatorConfig privateConfig;

	public CreatorConfig getConfig(){
        	CreatorConfig result;
        	if(privateConfig==null){
			result = globalConfig;
        	} else {
			result = privateConfig;
        	}
        	return result;
	}

	public void setConfig(CreatorConfig config){
		privateConfig = config;
	}
// ... tu implementacja klasy
}
0

Mam ogólnie taki problem

Mam kilkanaście różnych kreatorów np StringCreator , IntegerCreator , DateCreator, itd

każdy z nich kreuje obiekt w zależności od parametrów które otrzymuje konstruktor np StringCreator kreuje obiekt jeśli parametr Class<String> lub parametrem jest obiekt StringConfig analogicznie działa każdy z konstruktorów. Wszystkie kreatory implementują interfejs Creator.

Nie mam zbytniego doświadczenia, a myślę o jakimś narzędziu które zautomatyzowało by mi tworzenie tych obiektów. Mam teraz w swojej fabryce przeładowane metody
np

public StringCreator getCreator(Class<String> a){
	return new StringCreator();
}

public StringCreator getCreator(StringConfig sc){
	return new StringConfig(sc);
}

public NumericCreator<Integer> getCreator(Class<Ingeger> i){
	return new IngegerCreator();
}

public DateCreator getCreator(Class<Date> c){
	return new DateCreator();
}

itd...

Zastanawiam się czy takie rozwiązanie ma jakiś sens. Ogólnie problem polega jak "fajnie" to napisać .
Chciałem zamienić konstrukcję w stylu :

if(obj.getType().equals(String.class)){

}else if(obj.getType().equals(Integer.class))

itd

Coś na zasadzie jak działają narzędzia mockujące , czyli na podstawie danego pola tworzą albo null albo 0.00 olbo false itd

0

Przyjmuję wyzwanie.
Gwoli ścisłości - raczej nie robię czegoś za innych za darmo, ale to mnie akurat zaciekawiło.

  1. Plik leży na: http://www.sendspace.com/file/obs7xs
  2. Klasa utils.ClassUtils - podziękowania dla http://internna.blogspot.com/2007/11/java-5-retrieving-all-classes-from.html
  3. Główną klasą jest oczywiście klasa MetaFactory.
  4. Założyłem, że wszystkie configi - oprócz tej abstrakcyjnej klasy - są finalne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1