public abstract class DisplayImpl {
public abstract void rawOpen();
public abstract void rawPrint() ;
public abstract void rawClose();
}
/*
* Display類的功能是抽象的,負責”顯示一些東西“。該類位於”類功能層次結構“的最上層。
* 在impl字段中保存的是實現了Display類的具體功能的實例(impl是implementtation(實現)的縮寫
* 該實例通過Display類的構造函數被傳遞給Display*/
public class Display {
private DisplayImpl impl;
public Display(DisplayImpl impl) {
this.impl=impl;
}
public void open() {
impl.rawOpen();
}
public void print() {
impl.rawPrint();
}
public void close() {
impl.rawClose();
}
public final void display() {
open();
print();
close();
}
}
/*類的功能層次結構*/
public class CountDisplay extends Display {
public CountDisplay(DisplayImpl impl) {
super(impl);
// TODO Auto-generated constructor stub
}
public void multiDisplay(int times) {
open();
for(int i=0;i<times;i++) {
print();
}
close();
}
}
public class StringDisplayImpl extends DisplayImpl {
private String string;
private int width;
public StringDisplayImpl(String string) {
this.string=string;
}
@Override
public void rawOpen() {
printLine();
}
private void printLine() {
System.out.println("+");
for(int i=0;i<width;i++) {
System.out.println("-");
}
System.out.println("+");
}
@Override
public void rawPrint() {
System.out.println("|"+string+"|");
}
@Override
public void rawClose() {
printLine();
}
}
public class Main {
public static void main(String[] args) {
Display d1=new Display(new StringDisplayImpl("Hello China"));
Display d2=new CountDisplay(new StringDisplayImpl("Hello,World!"));
CountDisplay d3=new CountDisplay(new StringDisplayImpl("Hello universe"));
d1.display();
d2.display();
d3.display();
d3.multiDisplay(5);
}
}