在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。
一、 开闭原则
对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。
想要达到这样的效果,我们需要使用接口和抽象类。
因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。
【例】搜狗输入法
的皮肤设计。
抽象皮肤类(AbstractSkin):
public abstract class AbstractSkin {
//显示方法
public abstract void display();
}
默认皮肤(DefaultSkin):
public class DefaultSkin extends AbstractSkin {
/**
*
*/
@Override
public void display() {
System.out.println("默认皮肤");
}
}
自定义皮肤皮肤(CustSkin):
public class CustSkin extends AbstractSkin {
/**
*
*/
@Override
public void display() {
System.out.println("黑马皮肤");
}
}
搜狗输入法(SouGouInput):
public class SouGouInput {
private AbstractSkin skin;
public void setSkin(AbstractSkin skin) {
this.skin = skin;
}
public void display() {
skin.display();
}
}
测试:
public class TestSkin {
public static void main(String[] args) {
//使用皮肤
SouGouInput souGouInput=new SouGouInput();
//用户选择皮肤
DefaultSkin defaultSkin=new DefaultSkin();
CustSkin custSkin =new CustSkin();
//调用
souGouInput.setSkin(defaultSkin);
//显示
souGouInput.display();
}
}
二、里氏代换原则
里氏代换原则是面向对象设计的基本原则之一。
里氏代换原则:任何基类可以出现的地方,子类一定可以出现。通俗理解:子类可以扩展父类的功能,但不能改变父类原有的功能。换句话说,子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。
如果通过重写父类的方法来完成新的功能,这样写起来虽然简单,但是整个继承体系的可复用性会比较差,特别是运用多态比较频繁时,程序运行出错的概率会非常大。
下面看一个里氏替换原则中经典的一个例子
【例】正方形不是长方形。
我们发现,假如我们把一个普通长方形作为参数传入resize方法,就会看到长方形宽度逐渐增长的效果,当宽度大于长度,代码就会停止,这种行为的结果符合我们的预期;假如我们再把一个正方形作为参数传入resize方法后,就会看到正方形的宽度和长度都在不断增长,代码会一直运行下去,直至系统产生溢出错误。所以,普通的长方形是适合这段代码的,正方形不适合。
我们得出结论:在resize方法中,Rectangle类型的参数是不能被Square类型的参数所代替,如果进行了替换就得不到预期结果。因此,Square类和Rectangle类之间的继承关系违反了里氏代换原则,它们之间的继承关系不成立,正方形不是长方形。
如何改进呢?此时我们需要重新设计他们之间的关系。抽象出来一个四边形接口(Quadrila
标签:Java,原则,display,void,AbstractSkin,skin,设计,父类,public From: https://www.cnblogs.com/ynxiyan/p/17094948.html