Skip to content

Commit 05e7f51

Browse files
committed
Visitor Design Pattern - University Lecture Application
Special subjects are taught by Visiting Faculty
1 parent 6deb6b9 commit 05e7f51

File tree

3 files changed

+134
-0
lines changed

3 files changed

+134
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.premaseem;
2+
3+
import java.util.Scanner;
4+
5+
/*
6+
@author: Aseem Jain
7+
@title: Design Patterns with Java 9
8+
@link: https://premaseem.wordpress.com/category/computers/design-patterns/
9+
*/
10+
public class ClientStudent {
11+
public static void main (String[] args) {
12+
System.out.println();
13+
System.out.println("University Lecture application designed using Visitor design pattern \n");
14+
System.out.println("Subject available for lectures are:-");
15+
System.out.println("Maths");
16+
System.out.println("Computers");
17+
System.out.println("Aviation");
18+
System.out.println();
19+
System.out.println("Please pick subject ...");
20+
21+
Scanner scanner = new Scanner(System.in);
22+
String subjectOption = scanner.next();
23+
if (subjectOption.equalsIgnoreCase("Maths")){
24+
System.out.println("Math can be taught by in house Faculty");
25+
Subject subject = new Maths();
26+
subject.teach();
27+
}
28+
29+
if (subjectOption.equalsIgnoreCase("Computers")){
30+
System.out.println("Computers needs visiting Faculty, lets call Prof. Prem Aseem Jain :-)");
31+
Subject subject = new Computer();
32+
VisitingFaculty profAseem = new ProfAseem();
33+
subject.acceptVisitingFacultytoTeach(profAseem);
34+
}
35+
36+
if (subjectOption.equalsIgnoreCase("Aviation")){
37+
System.out.println("Aviation needs visiting Faculty, lets call Prof. Prem Aseem Jain :-)");
38+
Subject subject = new Aviation();
39+
VisitingFaculty profAseem = new ProfAseem();
40+
subject.acceptVisitingFacultytoTeach(profAseem);
41+
}
42+
43+
System.out.println("Class over - Go Home and have fun :-) ");
44+
45+
}
46+
}
+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.premaseem;
2+
3+
/*
4+
@author: Aseem Jain
5+
@title: Design Patterns with Java 9
6+
@link: https://premaseem.wordpress.com/category/computers/design-patterns/
7+
*/
8+
public abstract class Subject {
9+
10+
abstract void acceptVisitingFacultytoTeach (VisitingFaculty visitingFaculty);
11+
12+
void teach(){
13+
System.out.println("IN-HOUSE Faculty teaching "+ this.getClass().getSimpleName()+" subject");
14+
}
15+
}
16+
17+
class Aviation extends Subject{
18+
19+
@Override
20+
void acceptVisitingFacultytoTeach (VisitingFaculty visitingFaculty) {
21+
visitingFaculty.teach(this);
22+
}
23+
}
24+
25+
class Computer extends Subject{
26+
27+
@Override
28+
void acceptVisitingFacultytoTeach (VisitingFaculty visitingFaculty) {
29+
visitingFaculty.teach(this);
30+
}
31+
}
32+
33+
class Maths extends Subject{
34+
35+
@Override
36+
void acceptVisitingFacultytoTeach (VisitingFaculty visitingFaculty) {
37+
visitingFaculty.teach(this);
38+
}
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.premaseem;
2+
3+
/*
4+
@author: Aseem Jain
5+
@title: Design Patterns with Java 9
6+
@link: https://premaseem.wordpress.com/category/computers/design-patterns/
7+
*/
8+
9+
public interface VisitingFaculty {
10+
void teach (Aviation aviation);
11+
void teach (Computer computer);
12+
void teach (Maths maths);
13+
}
14+
15+
class ProfAseem implements VisitingFaculty{
16+
17+
@Override
18+
public void teach (Aviation aviation) {
19+
System.out.println("Visiting Faculty teaching Aviation subject");
20+
}
21+
22+
@Override
23+
public void teach (Computer computer) {
24+
System.out.println("Visiting Faculty teaching Computer subject");
25+
}
26+
27+
@Override
28+
public void teach (Maths maths) {
29+
System.out.println("Visiting Faculty teaching Maths subject");
30+
}
31+
}
32+
33+
class AnyOtherProfessor implements VisitingFaculty{
34+
35+
@Override
36+
public void teach (Aviation aviation) {
37+
System.out.println("Visiting Faculty teaching Aviation subject");
38+
}
39+
40+
@Override
41+
public void teach (Computer computer) {
42+
System.out.println("Visiting Faculty teaching Computer subject");
43+
}
44+
45+
@Override
46+
public void teach (Maths maths) {
47+
System.out.println("Visiting Faculty teaching Maths subject");
48+
}
49+
}

0 commit comments

Comments
 (0)