принцип открыто-закрыто
Принцип открытого-закрытого эквивалентен прародителю всех принципов, он утверждает, что он закрыт для модификации и открыт для расширения.
Принцип замены Лисков
Когда два класса имеют отношения наследования, подкласс не может изменять методы и переменные родительского класса.; в замене РихтеразаменятьОтносится к: когда есть родительский класс, родительский класс может быть заменен подклассом, и это не влияет на программу, которая следует принципу подстановки Лискова; когда он заменяется подклассом, это влияет на программа, указывающая, что подкласс Если метод родительского класса изменен, принцип подстановки Лисков не соблюдается;
Принцип инверсии зависимости
Принцип инверсии зависимостей является реализацией принципа открытости-закрытости, и он также выступает за то, чтобы он был открыт для расширения и закрыт для модификации. Его основная идея заключается вСтолкнитесь с программированием интерфейса, не сталкивайтесь с программированием конкретной реализации.
Это следующая принцип инверсии зависимости от диаграмм UML-диаграмм UML, исходные слова, когда клиенты покупают товары, покупки этот метод, который будет передан в соответствующий магазин, магазин, когда вы хотите изменить, мы должны изменить CusRomer этот класс метода покупок, а теперь как Долгое, как определение интерфейсов в магазине, все магазины - это методы для достижения этого интерфейса, метод покупок до тех пор, пока клиентский класс входящего магазина этот интерфейсный класс на нем. Тогда конкретное осознание, чтобы купить, где можно было купить в магазин на нем, не модифицируя метод CusRomer этого класса;
//代码来之'C语言中文网'
public class DIPtest
{
public static void main(String[] args)
{
Customer wang=new Customer();
System.out.println("顾客购买以下商品:");
wang.shopping(new ShaoguanShop());
wang.shopping(new WuyuanShop());
}
}
//商店
interface Shop
{
public String sell(); //卖
}
//韶关网店
class ShaoguanShop implements Shop
{
public String sell()
{
return "韶关土特产:香菇、木耳……";
}
}
//婺源网店
class WuyuanShop implements Shop
{
public String sell()
{
return "婺源土特产:绿茶、酒糟鱼……";
}
}
//顾客
class Customer
{
public void shopping(Shop shop)
{
//购物
System.out.println(shop.sell());
}
}
//输出
顾客购买以下商品:
韶关土特产:香菇、木耳……
婺源土特产:绿茶、酒糟鱼……
единственная ответственность
Единая ответственность требует, чтобы класс отвечал только за одну ответственность; Звучит просто, но на практике это очень трудно понять. Поскольку эта ответственность является очень абстрактным понятием в Китае, Китай является страной с очень богатым культурным наследием, точно так же, как пример, упомянутый в книге «Дзен шаблонов проектирования»: например, китайские палочки для еды могут использоваться как и то, и другое. нож используется для разделения пищи, и его также можно использовать в качестве вилки для еды.В зарубежных странах вилка - это вилка, и когда она используется для взятия пищи, нож используется для разделения пищи, поэтому этот единственный Ответственность требует от разработчиков программного обеспечения очень богатого практического опыта. Иначе трудно понять;
Закон Деметры
Закон Деметры также известен как принцип наименьшего знания: чем меньше класс раскрывает, тем лучше.
- С точки зрения зависимых лиц, ей должны полагаться только зависимые объекты.
- С точки зрения зависимого, выставляйте только те методы, которые должны быть выставлены.
Личное понимание: когда классу A необходимо вызвать три метода класса B для достижения функции, класс B может инкапсулировать эти три метода, а затем предоставить инкапсулированный метод только для A, так что A должен вызывать только B. Этот метод инкапсуляции Когда есть изменения в трех методах B, вам нужно только изменить метод внешней инкапсуляции B, но вызывающему объекту A не нужно его менять, потому что A знает только, что вызов этого метода может выполнить функцию. Не нужно указывать конкретно, как реализована внутренняя реализация B, что снижает степень связанности программы;
Принцип разделения интерфейса
Это похоже на единую ответственность, но не то же самое.
- Принцип единой ответственности фокусируется на обязанностях, а принцип разделения интерфейса — на изоляции зависимостей интерфейса.
- Принцип единой ответственности в основном ограничивает класс, который нацелен на реализацию и детали в программе; принцип изоляции интерфейса в основном ограничивает интерфейс, в основном направленный на построение абстракции и общей структуры программы.
Официальное определение:От программистов требуется сделать все возможное, чтобы разделить раздутый интерфейс на более мелкие и более конкретные интерфейсы, чтобы интерфейс содержал только те методы, которые интересуют клиентов, и уменьшал степень связанности программ.
Это правило также следует применять в соответствии с реальным бизнес-сценарием.Если уровень детализации слишком мал, это приведет к резкому увеличению классов.Очевидно, что функции достаточно трех-четырех классов.Если степень детализации мала, она будет становится дюжина или даже больше.Десятки из них, хотя связь программы низкая и более гибкая, трудно поддерживать. Если степень детализации велика, степень связи будет высокой, и программа будет негибкой. Следовательно, этот принцип требует от технического персонала достаточной практики, опыта и понимания;
Принцип синтетического повторного использования
Это требует, чтобы при повторном использовании программного обеспечения необходимо сначала использовать отношения ассоциации, такие как композиция или агрегация, для его реализации, а затем рассмотреть возможность использования отношений наследования для его реализации. Если вы хотите использовать отношения наследования, вы должны строго следоватьПринцип замены Лисков. Составной принцип повторного использования и принцип замещения Лисков дополняют друг друга, и оба являются конкретными спецификациями реализации принципа открытого-закрытого.
Если вы не знаете, что такое композиция и агрегация, вы можете прочитать эту статью>, хорошо говорит
Суммировать
В программировании старайтесь следовать семи принципам ООП. Но есть хорошая поговорка,Правила мертвы, люди живы. Это означает, что эти семь принципов иногда не являются всемогущими. Иногда, если некоторые бизнес-сценарии следуют этим принципам, их становится трудно поддерживать. Поэтому все должно основываться на реальности. То же самое верно и для 23 шаблонов проектирования. следуй мертвым правилам.