设计模式七原则的开闭原则开闭原则是编程中最基础、最重要的设计原则,是设计模式的核心。
开合原则是对扩张开放,对修正封闭。
这意味着,如果需要更改软件,则通过尽可能扩展软件实体行为的方式来实现,而不是基于现有代码进行修改。
栗的假设是,现在我们希望有一个能根据传入的班级输出该类型的班级:
public class OCP { publicstaticvoidmain (string [ ] args ) { Worker worker=new Worker; worker.work(newa ) ); worker.work(newb ) ); } class worker { public void work (base base ) if ) baseinstanceofa ) { print1; }elseif(baseinstanceofb ) { print2; } } public void print1() { System.out.println ) (这是a类); } public void print2((system.out.println ) ) (这是b类); }要添加class base { } classaextendsbase { } classbextendsbase { }类c,必须修改代码。
public class OCP { publicstaticvoidmain (string [ ] args ) { Worker worker=new Worker; worker.work(newa ) ); worker.work(newb ) ); worker.work(newc ); } class worker { public void work (base base ) if ) baseinstanceofa ) { print1; }elseif(baseinstanceofb ) { print2; } else if (基本实例) {打印3 }; } } public void print1() { System.out.println ) (这是a类); } public void print2((system.out.println ) ) (这是b类); } public void print3() { System.out.println ) (这是c类); } class base { } classaextendsbase { } classbextendsbase { } classcextendsbase { }有许多更改,可以修改Worker类的work逻辑,使一个类
以下代码遵循开闭原则。
class worker { public void work (base base ) { base.print; } abstract class base { publicabstractvoidprint (; } classaextendsbase { @ overridepublicvoidprint () { System.out.println ) (这是a类) ); } classbextendsbase { @ overridepublicvoidprint () { System.out.println ) (这是b类) ); } classcextendsbase { @ overridepublicvoidprint () { System.out.println ) (这是c类) ); }当前代码将Base作为抽象类,并让子类重写其print方法。 如果需要添加新功能,只需继承Base类即可。 Worker类的work方法也只是调用Base的print方法,新功能不会强制进行更改。 对扩张开放,对修正关闭。 我是http://ww .