提供了一個統一的介面,用來存取次系統中的一群介面。表象定義了一個較高層次的介面,讓次系統更容易使用。
深入淺出設計模式
買了一個家庭劇院,擁有許多功能:播放器、投影機、自動螢幕、環繞音效、爆米花機。
但在我需要觀看電影時,我需要開啟螢幕、音效、爆米花機、播放器等流程才能看的了電影,該如何解決這種混亂?
我們利用表象模式呼叫表象物件中的方法幫我完成。
static void Main(string[] args)
{
Console.WriteLine("Facade Pattern!");
//Init
Amplifier amplifier = new Amplifier();
CdPlayer cdPlayer = new CdPlayer();
Projector projector = new Projector();
HomeTheaterFacade homeTheater = new HomeTheaterFacade(amplifier,cdPlayer,projector);
homeTheater.WatchMovie();
homeTheater.CloseMovie();
}
表象物件
public class HomeTheaterFacade
{
Amplifier amplifier;
CdPlayer cdPlayer;
Projector projector;
public HomeTheaterFacade(Amplifier amplifier,CdPlayer cdPlayer,Projector projector){
this.amplifier = amplifier;
this.cdPlayer = cdPlayer;
this.projector = projector;
}
public void WatchMovie(){
Console.WriteLine("WatchMovie starting....");
amplifier.On();
cdPlayer.Play();
projector.On();
}
public void CloseMovie(){
Console.WriteLine("CloseMovie starting....");
amplifier.Off();
cdPlayer.Stop();
projector.Off();
}
}
劇院子系統
public class Amplifier
{
public void On(){
Console.WriteLine("Amplifier On");
}
public void Off(){
Console.WriteLine("Amplifier Off");
}
}
public class Projector
{
public void On(){
Console.WriteLine("DvdPlayer Play");
}
public void Off(){
Console.WriteLine("DvdPlayer Stop");
}
}
public class CdPlayer
{
public void Play(){
Console.WriteLine("CdPlayer Play");
}
public void Stop(){
Console.WriteLine("CdPlayer Stop");
}
}
結果
Learn More →
減少物件之間的互動,只和你的密友談話。
當你正在設計一個系統,不管是任何物件,都要注意和他互動的物件有哪些,並注意他和這些類別如何互動。
深入淺出設計模式
例如以某個物件而言,在這個物件內的方法中,只應該引用以下物件的方法:
該物件本身:
class KeepSimple
{
private void Method1(){
Method2();
}
private void Method2(){
}
}
被當作方法的參數而傳遞進來的動作:
class KeepSimple
{
private void Method1(Class1 class1){
class1.Method1();
}
}
public abstract class Class1
{
public abstract void Method1();
}
此方法所建立或實體化的物件:
class KeepSimple
{
private void Method1(){
Class1 class1 = new Class1();
class1.Method1();
}
}
public class Class1
{
public void Method1(){
}
}
物件的任何元件:
class KeepSimple
{
Class1 class1 = new Class1();
private void Method1(){
class1.Method1();
}
}
public class Class1
{
public void Method1(){
}
}
違反守則情形
class KeepSimple
{
private void Method1(){
Class1 class1 = new Class1();
Class2 class2 = class1.Method1();
}
}
public class Class1
{
public Class2 Method1(){
return null;
}
}
public class Class2{
public void Method1(){
}
}
前言 為什麼需要做測試?一個沒有經過測試或驗證的程式碼,都是💩(開玩笑)ㄈ 利用測試驅動開發,先撰寫測試在撰寫程式碼的方式,除了可以確保程式碼是可測的之外,他也能保證在測試案例範圍內是不會有錯的,也因此也能利用測試文件作為規格書使用。 術語介紹 SUT(System Under Test/Software Under Test) 待測程式 例如一個待測試的方法
Apr 12, 2020轉接器模式(Adapter) 將一個類別介面,轉換成另一個介面以供客戶使用。轉接器讓原本介面不相容的物件可以合作無間。 [name=深入淺出設計模式] 簡單範例 有一個池塘,裡面有許多鴨子,突然來了一隻火雞想融入鴨群裡,他透過了轉接器模式,把自己的樣子換成了鴨子騙過了鴨群。 static void Main(string[] args) {
Feb 16, 2020or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up