软件开发最重要的是提高软件的可维护性
,可复用性
,可扩展性
,灵活性
,所以在开发过程中我们要根据以下六个原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。
开闭原则
:对扩展开发,对修改关闭。 在进行拓展的时候,不能修改原有代码,实现一个热插拔效果。使得程序扩展性好,易于维护和升级。效果实现
: 抽象类和接口。上图中默认皮肤和线条小狗皮肤都继承了抽象皮肤这个类,并且重写了display()
这个方法;搜狗输入法与抽象皮肤之间是关联关系,表示搜狗输入法依赖于抽象皮肤这个类,也就是说搜狗输入法中有一个抽象皮肤类型的成员变量skin
,这意味着SouGouInput
可以与任何AbstractSkin
的实例关联。
package principles.open_close;
/**
* @Description:抽象皮肤类
*/
public abstract class AbstractSkin {
//显示的方法
public abstract void display();
}
package principles.open_close;
/**
* @Description:默认皮肤类
*/
public class DefaultSkin extends AbstractSkin{
public void display(){
System.out.println("默认皮肤");
}
}
package principles.open_close;
/**
* @Description:线条小狗皮肤类
*/
public class Xiantiaoxiaogou extends AbstractSkin{
public void display()
{
System.out.println("线条小狗皮肤");
}}
package principles.open_close;
/**
* 搜狗输入法
* @param
* @return
*/
public class SougouInput {
//由于这个变量是private的,所以下面要提供set方法进行初始化才能赋值
private AbstractSkin skin;
public void setSkin(AbstractSkin skin) {
this.skin = skin;
}
public void display(){
skin.display();
}
}
package principles.open_close;
public class Client {
public static void main(String[] args) {
//1.创建搜狗输入法的对象
SougouInput input = new SougouInput();
//2.创建皮肤的对象
DefaultSkin skin2 = new DefaultSkin();
// Xiantiaoxiaogou skin = new Xiantiaoxiaogou();
//3.将皮肤设置到输入法中
input.setSkin(skin2);
// input.setSkin(skin);
//4.显示皮肤
input.display();
}
}
package principles.open_close;
public class Lanyangyang extends AbstractSkin{
public void display(){
System.out.println("这里是懒羊羊皮肤");
}
}
package principles.open_close;
public class Client {
public static void main(String[] args) {
//1.创建搜狗输入法的对象
SougouInput input = new SougouInput();
//2.创建皮肤的对象
Lanyangyang skin3 = new Lanyangyang();
//3.将皮肤设置到输入法中
input.setSkin(skin3);
//4.显示皮肤
input.display();
}
}
总结:
从上面我们就能深刻的体会到开闭原则,就是对拓展开发(比如说我们要拓展新的皮肤),对修改关闭(我们不需要修改原来的其它类的代码)。