标签:view lang display private super 继承 gdi 其他 bst
作用:将类的功能层次结构与实现层次结构分离
类的功能结构层次:父类具有基本功能,在子类中添加需要的新功能
类的实现层次:父类通过声明抽象方法来定义接口(API),子类通过实现具体方法来实现接口(API)。子类并没有在父类的基础上新增功能,只是父类接口的具体实现。
重点:继承是强关联,委托是弱关联
继承很容易扩展类,但是类之间会形成了一种强关联关系(自我理解就是直接依赖关系)
委托就可以很轻松改变这种直接依赖关系,只有当传入的参数确定的时候才能确定两者之间的关系。并且这种机制可以把类中的具体实现委托给其他类去实现,就相当于把任务承包出去一样。
小案例
Display.java
/**
* @Author:DarknessShadow
* @description:
* @date 2020/5/15 10:11
*/
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();
}
}
CountDisplay.java
/**
* @Author:DarknessShadow
* @description:
* @date 2020/5/15 10:14
*/
public class CountDisplay extends Display {
public CountDisplay(DisplayImpl impl) {
super(impl);
}
public void multiDisplay(int times) {
open();
for (int i = 0; i < times; i++) {
print();
}
close();
}
}
DisplayImpl.java
/**
* @Author:DarknessShadow
* @description:
* @date 2020/5/15 10:15
*/
public abstract class DisplayImpl {
public abstract void rawOpen();
public abstract void rawPrint();
public abstract void rawClose();
}
StringDisplayImpl.java
/**
* @Author:DarknessShadow
* @description:
* @date 2020/5/15 10:17
*/
public class StringDisplayImpl extends DisplayImpl {
private String string;
private int width;
public StringDisplayImpl(String string) {
this.string = string;
this.width = string.getBytes().length;
}
@Override
public void rawOpen() {
printLine();
}
@Override
public void rawPrint() {
System.out.println("|" + string + "|");
}
@Override
public void rawClose() {
printLine();
}
private void printLine(){
System.out.print("+");
for (int i = 0; i < width; i++) {
System.out.print("-");
}
System.out.println("+");
}
}
标签:view lang display private super 继承 gdi 其他 bst
原文地址:https://www.cnblogs.com/myfaith-feng/p/12893719.html