1. Определение
Мы уже говорили:
Хип-хоп говорит: принцип единой ответственности
Хип-хоп говорит: принцип замены Рихтера
«Хип-хоп говорит: принцип инверсии зависимости»
«Хип-хоп говорит: принцип разделения интерфейса»
Хип-хоп говорит: Закон Деметры
Собрав все пять принципов, вы сможете призвать дракона.
Шенлонг — это принцип открытого и закрытого, о котором можно сказать так:Это реализация остальных пяти принципов и конечная цель объектно-ориентированного проектирования..
Так как открытый и закрытый принцип настолько высококлассный, давайте взглянем на определение открытого и закрытого принципа.
Программный объект долженоткрыт для расширения,нозакрыть для модификации.
Открытость для расширений означает, что мы можем без опасений добавлять новые функции.
Закрыто для модификации означает, что исходная функция не будет изменена.
Можно сказать, что это высшее состояние написания кода.
К сожалению, этого не может быть. Само требование модифицируется и модифицируется, а программа должна обслуживать требование, код нельзя не модифицировать.
Мы должны изо всех сил стараться следовать принципу открытого и закрытого. Полностью реализовать принцип открытия и закрытия, Чен и наложница не могут этого сделать!
2. Как это сделать
Вы можете подумать об этом: как мы можем быть открытыми для расширения и закрытыми для модификации?
Метод 1: абстрагируйте интерфейс или абстрактный класс и определите общедоступные методы для облегчения расширения.
Способ 2. Обратитесь к интерфейсу или абстрактному классу, не полагаясь на конкретный класс реализации.
Способ 3: интерфейс и абстрактный класс нельзя изменить, а интерфейс или абстрактный класс можно наследовать для достижения цели расширения.
Все эти три метода вращаются вокруг ядра, что это такое?
ВерноАннотация.
Мы должны программировать в сторону абстракции, а не в сторону конкретного программирования.
Это кажется знакомым?
Да, эта идея также упоминалась в Принципе инверсии зависимостей.
Принцип открытого-закрытого — это общая схема, а принцип инверсии зависимостей — очень хорошая реализация принципа открытого-закрытого.
И принцип подстановки Лисков также является очень хорошей реализацией открытого и закрытого принципа, поэтому мы можем напрямую использовать сцены и коды в «Хип-хоп говорит: принцип подстановки Лисков».
3. Сцена
Шеф-повара восьми кухонь
Ресторан Tomato вырос из небольшого ресторана в большой ресторан после тщательного управления.
Шеф: Босс, у нас сейчас большой бизнес и много трафика.Хотя я полон энергии, я не могу вынести опустошение такого количества людей.
Босс: Разрушение? Вы уверены?
Шеф: Как ты можешь, ты не ослышался, он заботится, он не выдерживает заботы о таком количестве людей.
Босс: Индейка, да, желание выжить очень сильное. Итак, каковы ваши мысли?
Шеф-повар: Я думаю, что мы можем представить шеф-поваров из восьми основных кухонь.Как только блюда будут переданы шеф-поварам разных кухонь, вкус и качество будут выше, чтобы их можно было сравнить с рестораном такого высокого уровня, как наш.
Босс: Ну, это логично, продолжайте.
Шеф-повар: Во-вторых, поскольку людей больше, мы можем увеличить скорость подачи блюд.В-третьих,...
Босс: Это имеет смысл. Мы нанимаем шеф-повара прямо сейчас, Маленькая Индейка. Поздравляю, вы получили повышение. Вы будущий шеф-повар. Потому что ваше желание выжить действительно сильно.
Шеф-повар: Спасибо, босс. (Внутреннее: У меня есть сильное желание выжить? Где оно сильное? Не уходи после школы, я дам тебе попробовать мою силу и приготовлю тебе стол из хороших блюд)
Желание выжить действительно сильное.
4. Осознайте
package com.fanqiekt.principle.liskov;
/**
* 抽象厨师类
*
* @author 番茄课堂-懒人
*/
public abstract class Chef {
/**
* 做饭
* @param dishName 餐名
*/
public void cook(String dishName){
System.out.println("开始烹饪:"+dishName);
cooking(dishName);
System.out.println(dishName + "出锅");
}
/**
* 开始做饭
*/
protected abstract void cooking(String dishName);
}
Абстрактный класс шеф-повара с общедоступным методом cook отвечает за часть той же логики, что и шеф-повара, например, за подготовку к началу приготовления и приготовление пищи.
Детали конкретной кулинарии обеспечивают абстрактный метод приготовления пищи (кулинария), который должен быть переписан поварами конкретной кухни.
package com.fanqiekt.principle.liskov;
/**
* 山东厨师
*
* @author 番茄课堂-懒人
*/
public class ShanDongChef extends Chef{
@Override
protected void cooking(String dishName) {
switch (dishName){
case "西红柿炒鸡蛋":
cookingTomato();
break;
default:
throw new IllegalArgumentException("未知餐品");
}
}
/**
* 炒西红柿鸡蛋
*/
private void cookingTomato() {
System.out.println("先炒鸡蛋");
System.out.println("再炒西红柿");
System.out.println("...");
}
}
Шеф-повар шаньдунской кухни ShanDongChef наследует абстрактный класс шеф-повара Chef и реализует абстрактный метод Cooking.
Добавлена функция яичницы с помидорами.Мы можем расширить класс ShanDongChef, унаследовав абстрактный класс Chef.Этооткрыт для расширения.
Избегайте модификации класса Chef, чтобы избежать внесения новых проблем в исходную систему.закрыто для модификации.
5. Хип-хоп говорит
Далее, пожалуйста, наслаждайтесьОригинальные песни по открытому закрытому принципу.
嘻哈说:接口隔离原则
作曲:懒人
作词:懒人
Rapper:懒人
对扩展开放
对修改封闭
对具体来讲
要大胆痛击
对抽象爱上
编程就会容易
开放封闭我中意疯迷
做番茄鸡蛋可以新增山东大厨
而不是在厨师类里大修大补
否则代码就像狂风中的蜡烛
随时可能一命呜呼
Прослушивание, пожалуйста, нажмите здесь
Когда мне нечего делать и слушать музыку, знания наполняют мой разум;
Не следует недооценивать изучение новых способов ношения наушников.