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);
}
}