Non penso che ci sia un modello di design per questo. È troppo semplice essere uno schema, credo.
Hai un elenco di oggetti e un elenco di funzioni e vuoi il prodotto cartesiano di questi due elenchi, ad es.
objects := [10, 20, 30]
functions := [add1, subtract1]
product := functions.product(objects)
// product looks like this:
// [(add1, 10), (subtract1, 10), (add1, 20), (subtract1, 20), (add1, 30), (subtract1, 30)]
product.map((fn, o) => fn(o))
// => [11, 9, 21, 19, 31, 29]
In C #, sembrerebbe un po 'come questo (non so davvero C #, quindi prendilo con un pizzico di sale):
using System;
using System.Collections.Generic;
using System.Linq;
class Prog
{
static int add1(int i) => i + 1;
static int sub1(int i) => i - 1;
public static void Main(string[] args) {
var objs = new List<int> { 10, 20, 30 };
var funs = new List<Func<int, int>> { add1, sub1 };
var result =
from obj in objs
from fun in funs
select fun(obj);
result.ToList().ForEach(Console.WriteLine);
// 11
// 9
// 21
// 19
// 31
// 29
}
}