設計モード——開閉原則
開閉原則:拡張に対して開放し、修正に対して閉鎖する.
具体的な実装:システムに比較的安定した抽象層を定義し、異なる実装挙動を具体的な実装層に移動して完了する.多くのオブジェクト向けプログラミング言語ではインタフェース、抽象クラスなどのメカニズムが提供されており、システムの抽象層を定義し、具体的なクラスを通じて拡張することができます.もしシステムの行為を修正する必要があるならば、抽象層に対していかなる変更を行う必要はなくて、ただ新しい具体的なクラスを増加して新しい業務機能を実現するだけでよくて、既存のコードを修正しない基礎の上でシステムの機能を拡張することを実現して、開閉の原則の要求を達成します.
JAVA例
具体的な実装:システムに比較的安定した抽象層を定義し、異なる実装挙動を具体的な実装層に移動して完了する.多くのオブジェクト向けプログラミング言語ではインタフェース、抽象クラスなどのメカニズムが提供されており、システムの抽象層を定義し、具体的なクラスを通じて拡張することができます.もしシステムの行為を修正する必要があるならば、抽象層に対していかなる変更を行う必要はなくて、ただ新しい具体的なクラスを増加して新しい業務機能を実現するだけでよくて、既存のコードを修正しない基礎の上でシステムの機能を拡張することを実現して、開閉の原則の要求を達成します.
JAVA例
/**
*
*/
public abstract class AbsChat {
public void display() {
System.out.println("AbsChat");
}
}
/**
*
*/
public class BarChat extends AbsChat {
@Override
public void display() {
System.out.println("BarChat");
}
}
/**
*
*/
public class PieChat extends AbsChat {
@Override
public void display() {
System.out.println("PieChat");
}
}
/**
*
*/
public class ChatDisplay {
private AbsChat chat = null;
public ChatDisplay(AbsChat chat) {
this.chat = chat;
}
public void setChat(AbsChat chat) {
this.chat = chat;
}
public void display() {
chat.display();
}
}
/**
*
*/
public class TestDemo {
public static void main(String[] args) {
// BarChat , Spring Bean , ,
AbsChat chat = new BarChat();
// AbsChat chat = new PieChat();
ChatDisplay chatDisplay = new ChatDisplay(chat);
chatDisplay.display();
}
}