Factory erstellt Objekte, ohne die Instanziierungslogik dem Client auszusetzen, und verweist auf das neu erstellte Objekt über eine gemeinsame Schnittstelle. Das Ziel besteht also darin, dem Kunden völlig bewusst zu machen, welche konkrete Art von Produkt es verwendet und wie diese Instanz erstellt wurde.
public interface IFactory // used by clients
{
IProduct CreateProduct();
}
public class FooFactory : IFactory
{
public IProduct CreateProduct()
{
// create new instance of FooProduct
// setup something
// setup something else
// return it
}
}
Alle Erstellungsdetails sind gekapselt. Sie können die Instanz über den Aufruf new() erstellen. Oder Sie können ein vorhandenes Beispiel-FooProduct klonen. Sie können das Setup überspringen. Oder Sie können vorher einige Daten aus der Datenbank lesen. Etwas.
Hier gehen wir zu Pipeline. Zweck der Pipeline ist es, eine größere Verarbeitungsaufgabe in eine Folge von kleineren, unabhängigen Verarbeitungsschritten einzuteilen (Filter). Wenn die Erstellung Ihrer Objekte eine große Aufgabe ist UND die Installationsschritte unabhängig sind, können Sie die Pipeline für die Einrichtung innerhalb der Factory verwenden. Aber der Instantiierungsschritt ist in diesem Fall definitiv nicht unabhängig. Es Mast vor anderen Schritten auftreten.
So können Sie Filter (das heißt Pipeline) zur Einrichtung Ihr Produkt bieten:
public class BarFilter : IFilter
{
private IFilter _next;
public IProduct Setup(IProduct product)
{
// do Bar setup
if (_next == null)
return product;
return _next.Setup(product);
}
}
public abstract class ProductFactory : IProductFactory
{
protected IFilter _filter;
public IProduct CreateProduct()
{
IProduct product = InstantiateProduct();
if (_filter == null)
return product;
return _filter.Setup(product);
}
protected abstract IProduct InstantiateProduct();
}
Und in Betonwerken Sie können Setup benutzerdefinierte Filter für Ihre Setup-Pipeline festgelegt.
In Bezug auf Datentransformation, können Sie uns bitte mit einem Beispiel nennen? –