java学习之设计原则开闭原则
当你知道的越多才发觉自己的渺小和无知。但是我们随生如蝼蚁当立鸿鹄之志。程序员饱和了吗?不不,是低级的程序员饱和了。高手永远都缺。励志成为全栈工程师,成为高级程序员。
当我们在设计软件的时候会大量的应用设计原则和设计模式。优秀的软件设计合理方便维护和拓展。
开闭原则是编程中最基础、最重要的设计原则
一个软件实体,如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。
当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化
编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则。
举例我们的输入法支持个性化皮肤。假如入我们不遵循设计原则。那么有一个新的皮肤就要重写修改大量的代码。软件不易维护。(因为我也是刚学理解不是很深)但是我们使用开闭原则的话就会好的多。代码实例
package main;
/**
* @Title设计原则开闭原则案例
* @Descriotion 抽象皮肤类
* @Time2022年2月14日 23:29:41
* @Author:yjh
*/
public abstract class AbstractSkin {
// 显示的方法
public abstract void display();
}
首先我们定义一个顶级的抽象类。由他进行衍生出皮肤子类。下面是皮肤子类。我定义了两个
package main;
/**
* @Title设计原则开闭原则案例
* @Descriotion 默认皮肤类
* @Time2022年2月14日 23:29:41
* @Author:yjh */
public class DefaultSkin extends AbstractSkin{
@Override public void display() {
System.out.println("默认皮肤类");
}
}
定义默认皮肤类。他是继承自顶级的抽象类的。也就是说具体的皮肤类是由顶级类派生的。
接下来是自定义皮肤类
package main;
/**
* @Title设计原则开闭原则案例
* @Descriotion 自定义皮肤类
* @Time2022年2月14日 23:29:41
* @Author:yjh
*/
public class DiySkin extends AbstractSkin{
@Override
public void display() {
System.out.println("自定义皮肤类");
}
}
接下来创建一个聚合类。从下面的代码我们是可以发现的我创建的搜狗输入法类实例化了顶级抽象类。并设置了setter方法这完全符合开闭原则中的模块和函数应该对扩展开放,对修改关闭
package main;
/**
* @Title设计原则开闭原则案例
* @Descriotion 聚合皮肤类搜狗输入法
* @Time2022年2月14日 23:29:41
* @Author:yjh
*/
public class SougouInput {
private AbstractSkin skin;
public void setSkin(AbstractSkin skin) {
this.skin = skin;
}
public void display(){
skin.display();
}
}
当我们写完这些就可以写一个测试类了。
测试类的代码如下
package main;
/**
* @Title设计原则开闭原则案例
* @Descriotion 测试类
* @Time2022年2月14日 23:29:41
* @Author:yjh
*/
public class Client {
public static void main(String[] args) {
// 1.创建搜狗输入法对象
SougouInput sougouInput =new SougouInput();
// 2.创建皮肤对象
DefaultSkin skin =new DefaultSkin();
// 3.将皮肤设置到输入法中。
sougouInput.setSkin(skin);
// 4.显示皮肤
sougouInput.display();
}
}
因为是刚学理解还不太深刻甚至还有点偏差。有不对的地方希望大家多多指正。
github地址:https://github.com/yangjinghua01/shejimoshi
其中有两个包一个叫main一个叫expan都是为了学习开闭原则写的。