Java设计模式:门面模式

门面模式

定义:

为子系中的一组接口提供一个一致的接口,Facade模式定义一个高层接口,这个接口使得这一子系统更加容易使用。

应用场景:

当需要使用复杂子系统的有限但直接的接口时,使用Facade模式。

要将子系统组织成层时,使用Facade模式。

优点:

1)更加易用: 子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟Facade交互就可以了。

2)松散耦合: 将客户端与子系统解耦,让子系统内部的模块能更容易扩展和维护。

3)更好的划分访问层次: 通过合理使用 Facade,可以更好地划分访问的层次,有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。

代码示例:

我们以电脑开机关机为例,其中CPU、Disk、Memory这些类为电脑子系统,Computer相当于Facade类。有了这个Facade类,那么客户端就不需要亲自调用子系统中的CPU、Disk、Memory模块了,也不需要知道系统内部的实现细节,甚至都不需要知道CPU、Disk、Memory模块的存在,客户端只需要跟Facade类交互就好了,从而更好地实现了客户端和子系统中CPU、Disk、Memory模块的解耦,让客户端更容易地使用系统。

package com.test;

public class Facade {
    
    

    public static void main(String[] args) {
    
    
        Computer computer = new Computer();
        computer.startup();
        computer.shutdown();
    }

}

class Computer {
    
    

    private CPU cpu;

    private Memory memory;

    private Disk disk;

    Computer(){
    
    
        cpu = new CPU();
        memory = new Memory();
        disk = new Disk();
    }


    public void startup(){
    
    
        cpu.startup();
        memory.startup();
        disk.startup();
        System.out.println("computer startup complete...");
    }

    public void shutdown(){
    
    
        cpu.shutdown();
        memory.shutdown();
        disk.shutdown();
        System.out.println("the computer is powered off...");
    }

}


class CPU {
    
    

    public void startup(){
    
    
        System.out.println("startup cpu...");
    }

    public void shutdown(){
    
    
        System.out.println("shutdown cpu...");
    }

}


class Memory {
    
    

    public void startup(){
    
    
        System.out.println("startup memory...");
    }

    public void shutdown(){
    
    
        System.out.println("shutdown memory...");
    }

}

class Disk {
    
    

    public void startup(){
    
    
        System.out.println("startup disk...");
    }

    public void shutdown(){
    
    
        System.out.println("shutdown disk...");
    }

}

猜你喜欢

转载自blog.csdn.net/qq_40042416/article/details/128515296