1、针对同一种行为,不同的对象会有不同的表现形式;
比如打印机都能打印
image.png
interface Printer {
public void print();
}
class BlackAndWhitePrinter implements Printer {
@Override
public void print() {
System.out.println("这是黑白打印---");
}
}
class ColorPrinter implements Printer {
@Override
public void print() {
System.out.println("这是彩色打印---");
}
}
public class DuoTai {
public static void main(String[] args) {
Printer printer = new BlackAndWhitePrinter();
printer.print();
printer = new ColorPrinter();
printer.print();
}
}
image.png
2、面向接口编程;
接口定义了行为规范,多接口的组合封装,可以定义一个程序的骨架
//打印机类接口
interface Printer {
//打印机能在纸上打印
public void print(Paper paper);
//打印机报备纸张信息
public void showPaperIntroduce(String paperDesc);
}
//纸类接口
interface Paper {
//纸张提供自己的类型
public String getType();
//纸张提供自己的规格说明
public String viewIntroduce();
}
将接口中可以公共实现的方法抽离到抽象类
abstract class AbstractPaper implements Paper {
protected String type;
private AbstractPaper() {
}
protected AbstractPaper(String type) {
this.type = type;
}
@Override
public String getType() {
return this.type;
}
}
abstract class AbstractPrinter implements Printer{
@Override
public void showPaperIntroduce(String paperDesc) {
System.out.println("打印机自动报备当前使用纸张:");
System.out.println(paperDesc);
}
}
具体子类实现
class A4 extends AbstractPaper {
public A4(String type) {
super(type);
}
@Override
public String viewIntroduce() {
return this.type + ":210×297";
}
}
class A5 extends AbstractPaper {
public A5(String type) {
super(type);
}
@Override
public String viewIntroduce() {
return this.type + ":148×210";
}
}
class BlackAndWhitePrinter extends AbstractPrinter {
@Override
public void print(Paper paper) {
this.showPaperIntroduce(paper.viewIntroduce());
System.out.println("这是" + paper.getType() + "黑白打印---");
}
}
class ColorPrinter extends AbstractPrinter {
@Override
public void print(Paper paper) {
this.showPaperIntroduce(paper.viewIntroduce());
System.out.println("这是" + paper.getType() + "彩色打印---");
}
}
具体使用程序
public class DuoTai {
public static void main(String[] args) {
Printer printer = new BlackAndWhitePrinter();
printer.print(new A5("硬A5纸"));
printer = new ColorPrinter();
printer.print(new A4("软A4纸"));
}
}
image.png
也可将接口如下修改,那么就程序骨架来说,又是另外一种规范了,则需要其他的具体实现方式
interface IPrinter {
//装纸
public void initPaper(IPaper paper);
//打印,需要在打印时报备纸张信息,并且说明时什么类型的打印
public void print();
//报备纸张信息
public void showPaperIntroduce();
}
一旦接口定义了程序的功能,那么程序实现,都得按照这个规范来实现,程序设计流程,在接口中方可体现
网友评论