ovládají se přes něj třídy, které od něj implementujou
třídy implementují interface
nedá se od něj dědit.
třída může implementovat několik interfejsů najednou
Příklad
// interface ptákapublic interface IPtak{ public void Pipni();}//třída, která implementuje interfacepublic class Vrana implements IPtak{ @Override public void Pipni() {System.out.println("KráKrá");}}
Servant (Služebník)
přidání dodatečné funkcionality skupině tříd, aniž bychom museli tyto třídy měnit a dávat do nich stejný/podobný kód
instance Služebníka obsluhují instance tříd požadujících novou funkčnost
např. posunutí geometrického tvaru o x
Generické třídy
umožňují parametrizovat některý datový člen
Výhodou tohoto přístupu je znovupoužitelnost kódu
Typickým příkladem jsou kolekce, které mohou udržovat jakýkoliv typ a zároveň být strongly typed (specifikovat přesně jaký typ objektu obsahují).
Příklad
/// <summary>/// Třída s parametrem typu barvy (jak budeme barvu reprezentovat)./// </summary>/// <typeparam name="TColor"></typeparam>class Car<TColor>{ private TColor m_color; public Car(TColor color) { // V tomto příkladě nám někdo musí sdělit defaultní barvu, protože v době psaní // třídy ji nemůžeme určit. m_color = color; } public void ChangeColor(TColor color) { m_color = color; } public TColor GetColor() { return m_color; }}class Program{ static void Main(string[] args) { // barvu budeme ukládát reprezentovat stringem Car<string> car1 = new Car<string>("Red"); // barvu budeme reprezentovat strukturou Color, která je součástí C#/.NET Car<Color> car2 = new Car<Color>(Color.Red); }}
Messenger (přepravka)
používá se ke sloučení několika samostatných informací do jednoho objektu
počet atributů = počet přenášených hodnot
atributy třídy jsou veřejné konstanty
lze k nim přistupovat přímo
nelze je dále měnit
lze definovat přístupové metody (gettery), příp. další užitečné metody (Ale potom se z přepravky spíše přibližuje běžným objektům)
atributy třídy jsou nastaveny v konstruktoru, dále je nelze měnit (bezpečné předání dat)
Příklad
public class Pozice{ public final int x; public final int y; public Pozice( int x, int y ) { this.x = x; this.y = y; }}