ΠΠ»Π°ΡΡΡ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΡΠΊΡΡΡΡ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π½ΠΎ Π·Π°ΠΊΡΡΡΡ Π΄Π»Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΡΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΏΡΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠΈ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠΈΠ½ΡΠΈΠΏ ΠΎΡΠΊΡΡΡΠΎΡΡΠΈ/Π·Π°ΠΊΡΡΡΠΎΡΡΠΈ (Open-Closed Principle, OCP) ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠΎΡΡΠΌ ΠΈΠ· ΠΏΡΡΠΈ SOLID-ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΠΈ ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π³ΠΈΠ±ΠΊΠΎΠΉ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ.
ΠΠ±ΡΡΠ½ΠΎ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ:
- ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΈΠ»ΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π΄Π°ΡΡ ΠΎΠ±ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ.
- ΠΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
Π‘Π»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ OCP ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, Π΄Π΅Π»Π°Π΅Ρ ΠΊΠΎΠ΄ ΠΏΡΠΎΡΠ΅ Π² ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΡ OCP:
- ΠΠΈΠ±ΠΊΠΎΡΡΡ ΠΊΠΎΠ΄Π°: ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°, ΡΡΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΡΠΈΡΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ.
- Π£Π»ΡΡΡΠ΅Π½Π½Π°Ρ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΡ: ΠΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°.
- Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ: ΠΠΎΠ΄ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΌ, ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠΎΡΡΡ: Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π±Π΅Π· ΡΠ³ΡΠΎΠ·Ρ ΡΠ»ΠΎΠΌΠ°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π».
ΠΡΠΈΠΌΠ΅Ρ Π½Π°ΡΡΡΠ΅Π½ΠΈΡ OCP
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΎΠΏΠ»Π°ΡΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΠΎΠΏΠ»Π°ΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΡΠ΅Π΄ΠΈΡΠ½ΡΡ ΠΊΠ°ΡΡΡ:
public class PaymentProcessor {
public void processPayment(String type, double amount) {
if (type.equals("credit_card")) {
// ΠΠΎΠ³ΠΈΠΊΠ° ΠΎΠΏΠ»Π°ΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΡΠ΅Π΄ΠΈΡΠ½ΡΡ ΠΊΠ°ΡΡΡ
}
}
}
ΠΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΠΏΠ»Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, PayPal, ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ processPayment
:
public class PaymentProcessor {
public void processPayment(String type, double amount) {
if (type.equals("credit_card")) {
// ΠΠΎΠ³ΠΈΠΊΠ° ΠΎΠΏΠ»Π°ΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΡΠ΅Π΄ΠΈΡΠ½ΡΡ ΠΊΠ°ΡΡΡ
} else if (type.equals("paypal")) {
// ΠΠΎΠ³ΠΈΠΊΠ° ΠΎΠΏΠ»Π°ΡΡ ΡΠ΅ΡΠ΅Π· PayPal
}
}
}
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π½Π°ΡΡΡΠ°Π΅Ρ OCP, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄. ΠΡΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠΈΡΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ Π·Π°ΡΡΡΠ΄Π½ΡΠ΅Ρ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΎΠΏΠ»Π°ΡΡ:
public interface PaymentMethod {
void pay(double amount);
}
public class CreditCardPayment implements PaymentMethod {
@Override
public void pay(double amount) {
// ΠΠΏΠ»Π°ΡΠ° ΡΠ΅ΡΠ΅Π· ΠΊΡΠ΅Π΄ΠΈΡΠ½ΡΡ ΠΊΠ°ΡΡΡ
}
}
public class PayPalPayment implements PaymentMethod {
@Override
public void pay(double amount) {
// ΠΠΏΠ»Π°ΡΠ° ΡΠ΅ΡΠ΅Π· PayPal
}
}
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΎΠΏΠ»Π°ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ PaymentMethod
, Π½Π΅ Π·Π°Π²ΠΈΡΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ
ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ:
public class PaymentProcessor {
private PaymentMethod paymentMethod;
public PaymentProcessor(PaymentMethod paymentMethod) {
this.paymentMethod = paymentMethod;
}
public void processPayment(double amount) {
paymentMethod.pay(amount);
}
}
ΠΠ»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΠΏΠ»Π°ΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ PaymentMethod
, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ΄ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°.
ΠΠ΅ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
ΠΠ±Π»Π°ΡΡΡ:: 00 ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΠ
Π ΠΎΠ΄ΠΈΡΠ΅Π»Ρ:: SOLID
ΠΡΡΠΎΡΠ½ΠΈΠΊ::
Π‘ΠΎΠ·Π΄Π°Π½Π°:: 2024-09-27
ΠΠ²ΡΠΎΡ::