Princípios de Design de Software - O Princípio Aberto-Fechado

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, LOLo skin de como exemplo para introduzir a aplicação do princípio aberto-fechado.

【Exemplo】LOLO 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();

    }
}

Acho que você gosta

Origin blog.csdn.net/qq_45171957/article/details/122224271
Recomendado
Clasificación