ΠΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² (Interface Segregation Principle, ISP) Π³Π»Π°ΡΠΈΡ: Π»ΡΡΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π½Π΅ ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ. ΠΡΠΎΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π΅Π½ΡΠΆΠ½ΠΎΠΉ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ ΠΈ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΊΠΎΠ΄Π°.
ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ISP ΡΠ»Π΅Π΄ΡΠ΅Ρ:
- Π‘ΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ·ΠΊΠΎΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ Π·Π°Π΄Π°ΡΠ°ΠΌ.
- ΠΠ·Π±Π΅Π³Π°ΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅Π°ΠΊΡΡΠ°Π»ΡΠ½Ρ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ.
- ΠΠ΅Π»ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Π³ΡΡΠΏΠΏΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΡ ISP
- Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ: Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π°Π²ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ.
- ΠΠΎΠ²ΡΡΠ΅Π½Π½Π°Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΡ: ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ Π±Π΅Π· Π²Π»ΠΈΡΠ½ΠΈΡ Π½Π° ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π΅ Π½ΡΠΆΠ½Ρ.
- Π£ΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ: Π’Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ·ΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΏΡΠΎΡΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π».
- Π£Π»ΡΡΡΠ΅Π½Π½Π°Ρ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ: ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΠΈ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ.
ΠΡΠΈΠΌΠ΅Ρ Π½Π°ΡΡΡΠ΅Π½ΠΈΡ ISP
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Worker
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΡ, ΡΠ°ΠΊ ΠΈ ΠΏΡΠΈΠ΅ΠΌ ΠΏΠΈΡΠΈ:
public interface Worker {
void work();
void eat();
}
public class RobotWorker implements Worker {
@Override
public void work() {
// Π ΠΎΠ±ΠΎΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
}
@Override
public void eat() {
// Π ΠΎΠ±ΠΎΡ Π½Π΅ Π΅ΡΡ β Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ ISP
throw new UnsupportedOperationException("Robots do not eat");
}
}
ΠΠ»Π°ΡΡ RobotWorker
Π²ΡΠ½ΡΠΆΠ΄Π΅Π½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ eat
, ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΠΌΡ Π½Π΅ Π½ΡΠΆΠ΅Π½. ΠΡΠΎ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ ISP, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈΡΠ½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡΠ΅ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ.
Π Π°Π·Π΄Π΅Π»ΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° Π΄Π²Π° Π±ΠΎΠ»Π΅Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ :
public interface Worker {
void work();
}
public interface Eater {
void eat();
}
Π’Π΅ΠΏΠ΅ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΠΌΡ Π½ΡΠΆΠ½Ρ:
public class HumanWorker implements Worker, Eater {
@Override
public void work() {
// Π§Π΅Π»ΠΎΠ²Π΅ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
}
@Override
public void eat() {
// Π§Π΅Π»ΠΎΠ²Π΅ΠΊ Π΅ΡΡ
}
}
public class RobotWorker implements Worker {
@Override
public void work() {
// Π ΠΎΠ±ΠΎΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
}
}
ΠΠ΅ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
ΠΠ±Π»Π°ΡΡΡ:: 00 ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΠ
Π ΠΎΠ΄ΠΈΡΠ΅Π»Ρ:: SOLID
ΠΡΡΠΎΡΠ½ΠΈΠΊ::
Π‘ΠΎΠ·Π΄Π°Π½Π°:: 2024-09-27
ΠΠ²ΡΠΎΡ::