├── src
├── devices
│ ├── Scanner.java
│ ├── Printer.java
│ ├── ConcreteScanner.java
│ ├── ConcretePrinter.java
│ ├── Device.java
│ └── ComboDevice.java
└── application
│ └── Program.java
├── .gitignore
├── .classpath
└── .project
/src/devices/Scanner.java:
--------------------------------------------------------------------------------
1 | package devices;
2 |
3 | public interface Scanner {
4 |
5 | String scan();
6 | }
7 |
--------------------------------------------------------------------------------
/src/devices/Printer.java:
--------------------------------------------------------------------------------
1 | package devices;
2 |
3 | public interface Printer {
4 |
5 | void print(String doc);
6 | }
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Compiled class file
2 | *.class
3 |
4 | # Log file
5 | *.log
6 |
7 | # BlueJ files
8 | *.ctxt
9 |
10 | # Mobile Tools for Java (J2ME)
11 | .mtj.tmp/
12 |
13 | # Package Files #
14 | *.jar
15 | *.war
16 | *.nar
17 | *.ear
18 | *.zip
19 | *.tar.gz
20 | *.rar
21 |
22 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
23 | hs_err_pid*
24 |
25 | # Eclipse
26 | .settings/
27 |
--------------------------------------------------------------------------------
/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/devices/ConcreteScanner.java:
--------------------------------------------------------------------------------
1 | package devices;
2 |
3 | public class ConcreteScanner extends Device implements Scanner {
4 |
5 | public ConcreteScanner(String serialNumber) {
6 | super(serialNumber);
7 | }
8 |
9 | @Override
10 | public void processDoc(String doc) {
11 | System.out.println("Scanner processing: " + doc);
12 | }
13 |
14 | @Override
15 | public String scan() {
16 | return "Scanned content";
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | course
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 |
15 | org.eclipse.jdt.core.javanature
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/devices/ConcretePrinter.java:
--------------------------------------------------------------------------------
1 | package devices;
2 |
3 | public class ConcretePrinter extends Device implements Printer {
4 |
5 | public ConcretePrinter(String serialNumber) {
6 | super(serialNumber);
7 | }
8 |
9 | @Override
10 | public void processDoc(String doc) {
11 | System.out.println("Printer processing: " + doc);
12 | }
13 |
14 | @Override
15 | public void print(String doc) {
16 | System.out.println("Printing: " + doc);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/devices/Device.java:
--------------------------------------------------------------------------------
1 | package devices;
2 |
3 | public abstract class Device {
4 |
5 | public String serialNumber;
6 |
7 | public Device(String serialNumber) {
8 | this.serialNumber = serialNumber;
9 | }
10 |
11 | public String getSerialNumber() {
12 | return serialNumber;
13 | }
14 |
15 | public void setSerialNumber(String serialNumber) {
16 | this.serialNumber = serialNumber;
17 | }
18 |
19 | public abstract void processDoc(String doc);
20 | }
21 |
--------------------------------------------------------------------------------
/src/devices/ComboDevice.java:
--------------------------------------------------------------------------------
1 | package devices;
2 |
3 | public class ComboDevice extends Device implements Scanner, Printer {
4 |
5 | public ComboDevice(String serialNumber) {
6 | super(serialNumber);
7 | }
8 |
9 | @Override
10 | public void print(String doc) {
11 | System.out.println("Combo printing: " + doc);
12 | }
13 |
14 | @Override
15 | public String scan() {
16 | return "Combo scan result";
17 | }
18 |
19 | @Override
20 | public void processDoc(String doc) {
21 | System.out.println("Combo processing: " + doc);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/application/Program.java:
--------------------------------------------------------------------------------
1 | package application;
2 |
3 | import devices.ComboDevice;
4 | import devices.ConcretePrinter;
5 | import devices.ConcreteScanner;
6 |
7 | public class Program {
8 |
9 | public static void main(String[] args) {
10 |
11 | ConcretePrinter p = new ConcretePrinter("1080");
12 | p.processDoc("My Letter");
13 | p.print("My Letter");
14 |
15 | System.out.println();
16 | ConcreteScanner s = new ConcreteScanner("2003");
17 | s.processDoc("My Email");
18 | System.out.println("Scan result: " + s.scan());
19 |
20 | System.out.println();
21 | ComboDevice c = new ComboDevice("2081");
22 | c.processDoc("My dissertation");
23 | c.print("My dissertation");
24 | System.out.println("Scan result: " + c.scan());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------