using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
Mensch frau = new Frau();
Mensch mann = new Mann();
const string dasEwigeMissverständnis = "Das gefällt mir.";
mann.Hört(mann.Sagen("Das gefällt mir")).Denkt("OK");
mann.Verhalten();
frau.Hört(mann.Sagen(dasEwigeMissverständnis))
.Denkt("Er will es haben!");
mann.Hört(frau.Sagen(dasEwigeMissverständnis))
.Weiß("Das gefällt mir" == "Ich will das haben. Schenk es mir!");
frau.Verhalten();
frau.Sieht(mann.Sieht(new Frau())).Denkt("Er will sie haben!");
}
}
public class Mann : Mensch
{
public override void Verhalten()
{
var etwas = Augen.SehenEtwas();
Bedürfnis genussBedürfnis = new GenussBedürfnis(etwas);
if(etwas.GefälltMir)
{
Bedürfnisse.Add(genussBedürfnis);
if(etwas.MussBesessenWerdenUmEsZuGeniessen)
{
Bedürfnis besitzBedürfnis = new BesitzBedürfnis(etwas);
Bedürfnisse.Add(besitzBedürfnis);
if(etwas.GehörtJetztMir)
{
Bedürfnisse.Remove(besitzBedürfnis);
Geniessen(etwas, genussBedürfnis);
}
}
else
Geniessen(etwas, genussBedürfnis);
}
else
genussBedürfnis = null;
}
private void Geniessen(Etwas etwas, Bedürfnis bedürfnis)
{
// Add action
Bedürfnisse.Remove(bedürfnis);
}
}
public class Frau : Mensch
{
public override void Verhalten()
{
Etwas etwas = Augen.SehenEtwas();
Bedürfnis besitzBedürfnis = new BesitzBedürfnis(etwas);
if(etwas.GefälltMir)
{
Bedürfnisse.Add(besitzBedürfnis);
if(etwas.GehörtJetztMir)
Bedürfnisse.Remove(besitzBedürfnis);
/* Kein weiterer Code. Es ist völlig egal ob Frau mit dem Objekt
* der Begierde etwas anfangen kann. Hauptsache sie besitzt es. */
}
else
{
Nörgeln("Das gefällt mir nicht!");
besitzBedürfnis = null;
}
}
private void Nörgeln(string satz)
{
throw new NotImplementedException();
}
}
public abstract class Mensch
{
protected Mensch()
{
Bedürfnisse = new List<Bedürfnis>();
}
public List<Bedürfnis> Bedürfnisse { get; protected set; }
public abstract void Verhalten();
public Mensch Hört(string satz)
{
throw new NotImplementedException();
}
public string Sagen(string satz)
{
throw new NotImplementedException();
}
public void Denkt(string gedanke)
{
throw new NotImplementedException();
}
public void Weiß(bool aussage)
{
throw new NotImplementedException();
}
public Mensch Sieht(object objekt)
{
throw new NotImplementedException();
}
}
public abstract class Bedürfnis
{
public Etwas etwas;
protected Bedürfnis(Etwas etwas)
{
this.etwas = etwas;
}
}
internal class GenussBedürfnis : Bedürfnis
{
public GenussBedürfnis(Etwas etwas) : base(etwas) { }
}
internal class BesitzBedürfnis : Bedürfnis
{
public BesitzBedürfnis(Etwas etwas) : base(etwas) { }
}
public class Etwas
{
private bool gefälltMir;
public bool GefälltMir
{
get
{
// Add taste
throw new NotImplementedException();
}
}
private bool mussBesessenWerdenUmEsZuGeniessen;
public bool MussBesessenWerdenUmEsZuGeniessen
{
get
{
// Add logic
throw new NotImplementedException();
}
}
public bool GehörtJetztMir
{
get { throw new NotImplementedException(); }
}
public object Objekt { get; set; }
}
internal static class Augen
{
public static Etwas SehenEtwas()
{
throw new NotImplementedException();
}
}
}