A sablon viselkedési minta lényege, hogy definiálunk egy viselkedési sablont, ami leÃr közös metódus hÃvásokat. Ez a minta erÅ‘sen épÃt a polimorfizmusra. Igazából ha van egy absztrakt osztályunk, ami publikál egy absztrakt metódust és ebbÅ‘l leszármaztatunk, akkor már a Template tervezési mintát használjuk.
using System;
using System.Collections.Generic;
namespace PeldaTervmintaTemplate
{
abstract class Allat
{
public abstract void Eszik();
public abstract void Alszik();
}
class Medve : Allat
{
public override void Alszik()
{
Console.WriteLine("A Medve téli álmot alszik.");
}
public override void Eszik()
{
Console.WriteLine("A Medve mindent is megeszik.");
}
}
class Macska : Allat
{
public override void Alszik()
{
Console.WriteLine("A Macska napi 12 órát alszik.");
}
public override void Eszik()
{
Console.WriteLine("A Macska húst eszik.");
}
}
class Program
{
static void Main(string[] args)
{
List<Allat> allatok = new List<Allat>
{
new Medve(),
new Macska()
};
foreach (var allat in allatok)
{
allat.Eszik();
allat.Alszik();
}
Console.ReadKey();
}
}
}
A program kimenete:
$
A Medve mindent is megeszik.
A Medve téli álmot alszik.
A Macska húst eszik.
A Macska napi 12 órát alszik.
Előnyök
- A duplikált kód egy közös ősosztályba is szervezhető vele.
- A leszármaztatott osztályok esetén jól kontrollálható, hogy mit Ãrhatnak felül az Å‘sosztály viselkedésébÅ‘l és mit nem.
Hátrányok
- A karbantartás költsége növekedhet, ha az ősnek sok metódusa van és sűrűn változik.
- LehetÅ‘séget ad a Liskov helyettesÃthetÅ‘ség megsértésére