天天看點

Java 設計模式 - 外觀模式

基本概念

外觀模式的作用:

-松散耦合,外觀模式松散了用戶端與子系統的耦合關系,讓子系統内部的子產品能更容易擴充和維護。

  • 簡單易用,外觀模式讓子系統更加易用,用戶端不再需要了解子系統内部的實作,也不需要跟衆多子系統内部的子產品進行互動,隻需要跟門面類互動就可以了。

-更好的劃分通路層次-通過合理使用 Facade,可以幫助我們更好地劃分通路的層次。有些方法是對系統外的,有些方法是系統内部使用的。把需要暴露給外部的功能集中到門面中,這樣既友善用戶端使用,也很好地隐藏了内部的細節。

外觀模式的角色:

  • SubSystem,子系統角色。表示一個系統的子系統或子產品。
  • Facade,外觀角色,用戶端通過操作外觀角色進而達到控制子系統角色的目的。對于用戶端來說,外觀角色好比一道屏障,對用戶端屏蔽了子系統的具體實作。

執行個體探究

假設一台電腦,它包含了 CPU(處理器),Memory(記憶體) ,Disk(硬碟)這幾個部件,若想要啟動電腦,則先後必須啟動 CPU、Memory、Disk。關閉也是如此。

但是實際上我們在電腦開/關機時根本不需要去操作這些元件,因為電腦已經幫我們都處理好了,并隐藏了這些東西。

這些元件好比子系統角色,而電腦就是一個外觀角色。

  • SubSystem,子系統角色。
    public class CPU {   
        public void startup(){  
            System.out.println("cpu startup!");  
        }  
        public void shutdown(){  
            System.out.println("cpu shutdown!");  
        }  
    }
    
    public class Memory {    
        public void startup(){  
            System.out.println("memory startup!");  
        }  
        public void shutdown(){  
            System.out.println("memory shutdown!");  
        }  
    } 
    
    public class Disk {  
        public void startup(){  
            System.out.println("disk startup!");  
        }  
        public void shutdown(){  
            System.out.println("disk shutdown!");  
        }  
    }     
               
  • Facade,外觀角色。
    public class Computer {  
        private CPU cpu;  
        private Memory memory;  
        private Disk disk;  
    
        public Computer(){  
            cpu = new CPU();  
            memory = new Memory();  
            disk = new Disk();  
        }  
    
        public void startup(){  
            System.out.println("start the computer!");  
            cpu.startup();  
            memory.startup();  
            disk.startup();  
            System.out.println("start computer finished!");  
        }  
    
        public void shutdown(){  
            System.out.println("begin to close the computer!");  
            cpu.shutdown();  
            memory.shutdown();  
            disk.shutdown();  
            System.out.println("computer closed!");  
        }  
    }  
               
  • 具體調用如下:
    Computer computer = new Computer();  
    computer.startup();  
    computer.shutdown();  
               

參考

  • http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html
  • http://blog.csdn.net/jason0539/article/details/22775311