定义:客户端不应该被迫依赖于它不使用的方法,即:一个类对另一个类的依赖应该建立在最小的接口上
以安全门为例:
存在的问题:如果要增加新的品牌的安全门,则违背了开闭原则
SafetyDoor
public interface SafetyDoor {
/**
* 防盗
*/
void antiTheft();
/**
* 防火
*/
void fireproof();
/**
* 防水
*/
void waterproof();
}
TestSafetyDoor
public class TestSafetyDoor implements SafetyDoor {
@Override
public void antiTheft() {
System.out.println("防盗");
}
@Override
public void fireproof() {
System.out.println("防火");
}
@Override
public void waterproof() {
System.out.println("防水");
}
}
Client
public class Client {
public static void main(String[] args) {
//存在的问题:如果要增加新的品牌的安全门,则违背了开闭原则
TestSafetyDoor testSafetyDoor = new TestSafetyDoor();
testSafetyDoor.antiTheft();
testSafetyDoor.fireproof();
testSafetyDoor.waterproof();
}
}
改进:
抽象出安全门各个功能的接口,新增其他品牌的安全门时只需实现对应功能的接口
AntiTheft
public interface AntiTheft {
/**
* 防盗
*/
void antiTheft();
}
Fireproof
public interface Fireproof {
/**
* 防火
*/
void fireproof();
}
Waterproof
public interface Waterproof {
/**
* 防水
*/
void waterproof();
}
TestSafetyDoor
public class TestSafetyDoor implements AntiTheft, Fireproof, Waterproof {
@Override
public void antiTheft() {
System.out.println("防盗");
}
@Override
public void fireproof() {
System.out.println("防火");
}
@Override
public void waterproof() {
System.out.println("防水");
}
}
Test01SafetyDoor
public class Test01SafetyDoor implements AntiTheft, Fireproof {
@Override
public void antiTheft() {
System.out.println("防盗");
}
@Override
public void fireproof() {
System.out.println("防火");
}
}
Client
public class Client {
public static void main(String[] args) {
//Test品牌安全门
TestSafetyDoor testSafetyDoor = new TestSafetyDoor();
testSafetyDoor.antiTheft();
testSafetyDoor.fireproof();
testSafetyDoor.waterproof();
System.out.println("=================");
//Test品牌安全门
Test01SafetyDoor test01SafetyDoor = new Test01SafetyDoor();
test01SafetyDoor.antiTheft();
test01SafetyDoor.fireproof();
}
}
评论 (0)