开闭原则
定义
对扩展开放,对修改关闭。对提供方的代码修改开放,对使用方的代码修改关闭。即提供方代码的修改,不影响使用方代码的运行。
代码示例
反例
package com.yyy.severnPrinciple.openandclose;
//开闭原则
//对提供方代码的修改开启,对使用方代码的修改关闭
//下方的这个示例就不满足开闭原则,当提供方代码修改时,使用方必须也要修改代码才能实现某个功能
public class OpenAndClose {
public static void main(String[] args) {
ShapeEditor shapeEditor=new ShapeEditor();
shapeEditor.draw(new JvXin());
shapeEditor.draw(new YuanXin());
shapeEditor.draw(new SanJiao());
}
}
//使用方
class ShapeEditor {
public void draw(Shape s) {
if(s.type==1){
System.out.println("这是一个矩形");
}else if (s.type==2){
System.out.println("这是一个圆形");
}else{
System.out.println("这是一个三角形");
}
}
}
class Shape {
int type;
}
//提供方
class JvXin extends Shape{
JvXin(){
super.type=1;
}
}
class YuanXin extends Shape {
YuanXin(){
super.type=2;
}
}
class SanJiao extends Shape{
SanJiao(){
super.type=3;
}
}
正例
package com.yyy.severnPrinciple.openandclose;
//在上一个例子中,做一些优化,使其符合开闭原则
//通过下方代码的修改,新增一个图形时,使用方的代码就无需修改,从而满足了开闭原则
public class OpenAndClose2 {
public static void main(String[] args) {
ShapeEditor1 shapeEditor=new ShapeEditor1();
shapeEditor.draw(new JvXin1());
shapeEditor.draw(new YuanXin1());
shapeEditor.draw(new SanJiao1());
}
}
//绘图类,使用方
class ShapeEditor1{
public void draw(Shape1 s){
s.run();
}
}
interface Shape1{
public void run();
}
//图形,提供方
class JvXin1 implements Shape1{
public void run(){
System.out.println("这是一个矩形");
}
}
class YuanXin1 implements Shape1{
public void run(){
System.out.println("这是一个圆形");
}
}
class SanJiao1 implements Shape1 {
public void run() {
System.out.println("这是一个三角形");
}
}