Builder public abstract class Maze Builder public virtual
Имплементация Builder клас (чрез абстрактен клас): public abstract class Maze. Builder { public virtual void Build. Maze() {} public virtual void Build. Room( int room. Number) {} public virtual void Build. Door( int room. From, int room. To) {} public virtual Maze Get. Maze() { return null; } }
Имплементация Builder клас (чрез интерфейс): public interface Maze. Builder { void Build. Maze(); void Build. Room(int room. Number); void Build. Door(int room. From, int room. To); Maze Get. Maze(); }
Имплементация Concrete. Builder клас: public class Standart. Maze. Builder : Maze. Builder { Maze current. Maze; public Standart. Maze. Builder() { current. Maze = null; } public override void Build. Maze() { current. Maze = new Maze(); } public override void Build. Door(int room. From, int room. To) { // build door between the rooms } public override void Build. Room(int room. Number) { // build room. . . } public override Maze Get. Maze() { return current. Maze; } }
Имплементация Concrete. Builder клас: public class Counting. Maze. Builder : Maze. Builder { private int doors; private int rooms; public Counting. Maze. Builder() {} public override void Build. Maze() { doors = 0; rooms = 0; } public override void Build. Door(int room. From, int room. To) { doors++; } public override void Build. Room(int room. Number) { rooms++; } public void Get. Counts(out int rooms. Count, out int doors. Count) { doors. Count = doors; rooms. Count = rooms; } }
Имплементация Director клас: public class Maze. Game { public Maze. Game() { /* some initialization code; */ } public Maze Create. Maze(Maze. Builder builder) { builder. Build. Maze(); builder. Build. Room(1); builder. Build. Room(2); builder. Build. Door(1, 2); return builder. Get. Maze(); } public Maze Create. Complex. Maze(Maze. Builder builder) { builder. Build. Maze(); for(int i=0; i<100; i++) { builder. Build. Room(i); } // build some doors. . . return builder. Get. Maze(); } }
Имплементация Използване на класовете: public class Client { public static void Demo 1() { Maze. Game game = new Maze. Game(); Standart. Maze. Builder builder = new Standart. Maze. Builder(); Maze maze = game. Create. Maze(builder); } public static void Demo 2() { int rooms = 0; int doors = 0; Maze. Game game = new Maze. Game(); Counting. Maze. Builder builder = new Counting. Maze. Builder(); game. Create. Maze(builder); builder. Get. Counts(out rooms, out doors); Console. Write. Line("Maze has {0} rooms and {1} doors", rooms, doors); } }
Специални благодарности • Ивайло Братоев mail: ivaylo. bratoev@dontspam. gmail. com • Бойко Станев mail : boyko. stanev@dontspam. gmail. com
- Slides: 23