面向接口编程是一种常用的编程方式,可以有效地提高代码的复用性,增强程序的扩展性和维护性。
-
场景
某工厂生产产品 A,产品 A 主要是由设备 A 来完成生产,用程序模拟生产过程。
产品 B 是由设备 B 来生产的。
1.不使用接口
1.创建 EquimentA类。
public class EquipmentA {
public void work() {
System.out.println("设备A运行,生产产品A");
}
}
2.创建 EquimentB类。
public class EquipmentB {
public void work() {
System.out.println("设备B运行,生产产品B");
}
}
3、创建 Factory 类。
public class Factory {
private EquipmentA equipmentA;
public EquipmentA getEquipmentA() {
return equipment;
}
public void setEquipmentA(EquimentA equipmentA) {
this.equipment = equipment;
}
public void work() {
System.out.println("开始生产...");
this.equipmentA.work();
}
}
4.生产产品A
public class Test {
public static void main(String[] args) {
//初始化工厂
Factory factory = new Factory();
EquipmentA equipmentA = new EquipmentA();
factory.setEquipment(equipmentA);
//开始工作
factory.work();
}
}
当需求发生改变时,就要频繁修改类的内部结构的方式是需要避免的,因为这种结构的程序扩展性很差。如何改进?使用面向接口编程即可。
2.使用面向接口编程
1、创建接口 Equiment。
package com.southwind.test;
public interface Equiment {
public void work();
}
2、创建 Equiment 的实现类。
package com.southwind.test;
public class EquipmentA implements Equiment {
public void work() {
System.out.println("设备A运行,生产产品A");
}
}
public class EquipmentB implements Equiment {
public void work() {
System.out.println("设备B运行,生产产品B");
}
}
public class EquipmentC implements Equiment {
public void work() {
// TODO Auto-generated method stub
System.out.println("设备C运行,生产产品C");
}
}
3、创建 Factory 类。
public class Factory {
private Equiment equipment;
public Equiment getEquipment() {
return equipment;
}
public void setEquipment(Equiment equipment) {
this.equipment = equipment;
}
public void work() {
System.out.println("开始生产...");
this.equipment.work();
}
}
4.生产产品
public class Test {
public static void main(String[] args) {
//初始化工厂
Factory factory = new Factory();
// EquipmentB equipmentB = new EquipmentB();
// factory.setEquipment(equipmentB);
// EquipmentA equipmentA = new EquipmentA();
// factory.setEquipment(equipmentA);
EquipmentC equipmentC = new EquipmentC();
factory.setEquipment(equipmentC);
//开始工作
factory.work();
}
}