1.1 Princípio aberto e fechado
Aberto para extensão, fechado para modificação . Quando o programa precisa ser expandido, o código original não pode ser modificado para obter um efeito hot-plug. Em suma, é tornar o programa expansível, fácil de manter e atualizar.
Para conseguir esse efeito, precisamos usar interfaces e classes abstratas.
Como a abstração é flexível e adaptável, desde que a abstração seja razoável, a estabilidade da arquitetura de software pode ser basicamente mantida. Os detalhes voláteis no software podem ser estendidos a partir da classe de implementação derivada da abstração.Quando o software precisa mudar, é necessário apenas re-derivar uma classe de implementação para expandir de acordo com os requisitos.
A seguir, LOL
o skin de como exemplo para introduzir a aplicação do princípio aberto-fechado.
【Exemplo】LOL
O design da pele.
Análise: Cada herói tem sua própria skin, essas skins possuem características comuns, uma classe abstrata (AbstractSkin) pode ser definida para eles, e cada skin específica (DefaultSkin e MetalGearSkin) é sua subclasse. Se a classe hero quiser usar a skin, ela só precisa confiar na classe abstrata da skin, usar a classe abstrata para aceitar a subclasse e chamar o método da subclasse, de modo que toda vez que a skin for alterada, haja não há necessidade de alterar a classe do herói, e não há necessidade de modificar o código de classe original, de modo que satisfaça o princípio aberto-fechado.
Interface da pele:
public abstract class AbstractSkin {
/*
显示皮肤类
*/
public abstract void display();
}
Pele padrão:
public class DefaultSkin extends AbstractSkin{
@Override
public void display() {
System.out.println("默认皮肤类");
}
}
Skins sólidas de Metal Gear:
public class MetalGearSkin extends AbstractSkin{
@Override
public void display() {
System.out.println("合金装备亚索");
}
}
Classe do herói:
public class YasuoHero {
private AbstractSkin skin;
public void setSkin(AbstractSkin skin){
this.skin = skin;
}
public void display(){
skin.display();
}
}
Classe de teste:
public class Client {
public static void main(String[] args) {
//1、创建英雄亚索
YasuoHero yasuo = new YasuoHero();
//2、创建皮肤对象
// DefaultSkin skin = new DefaultSkin();
MetalGearSkin skin = new MetalGearSkin();
yasuo.setSkin(skin);
yasuo.display();
}
}