当前位置:   article > 正文

Java23种设计模式-结构型模式之外观模式

Java23种设计模式-结构型模式之外观模式

外观模式(Facade Pattern):为复杂的系统提供了一个简单的统一接口,使得系统更易于使用和理解(对外提供一个统一的方法,来访问子系统中的一群接口

外观模式三个核心角色:
角色1.外观(Facade):外观类提供了一个简化的接口,封装了系统的复杂性。
角色2.子系统(Subsystem):子系统由多个相互关联的类组成,负责系统的具体功能。
角色3.客户端(Client):客户端则使用外观对象来与系统交互,而不需要了解系统内部的具体实现

优点:
1.简化接口:隐藏了系统的复杂细节,提供了一个简单的、高层的接口。
2.提高易用性:使得系统更容易被使用和理解。
3.降低耦合性:减少了系统各部分之间的依赖和耦合。
4.更好的可维护性:便于系统的维护和扩展。

缺点:
1.不符合开闭原则:在某些情况下,对系统的修改可能需要修改外观类,这违反了开闭原则。
2.灵活性受限:外观类的设计可能会限制系统的灵活性。
3.可能增加复杂度:如果外观类过于复杂,可能会增加系统的整体复杂度。
4.依赖性:客户端可能会过度依赖外观类,导致代码难以移植和维护。
5.性能影响:通过外观类进行交互可能会引入一定的性能开销。
6.代码可读性降低:过于复杂的外观类可能会降低代码的可读性。

应用场景
1.复杂的子系统集成。
2.提供一个统一的接口来访问多个不同的系统或模块。
3.简化复杂的系统,使其更易于使用和管理。

示例
ComputerFacade类作为外观类,它封装了对CPU、Memory和HardDrive类的操作,客户端只需要与ComputerFacade类交互,从而简化了客户端Demo的代码

//定义子系统接口和类
public class CPU {
    public void freeze(){
        System.out.println("CPU freeze");
    }
    public void jump(long position){
        System.out.println("CPU jump to position"+position);
    }
    public void execute(){
        System.out.println("CPU execute.");
    }
}
public class Memory {
    public void load(long position,byte[] data){
        System.out.println("Memory load from position"+position);
    }
}
public class HardDrive {
    public byte[] read(long lba,int size){
        System.out.println("Hard drive read lba"+lba+"size"+size);
        return new byte[0];
    }
}
//创建外观类
public class ComputerFacade {
    private static final long BOOT_ADDRESS = 0x0000fff0L;
    private static final long BOOT_SECTOR = 0x00007C00L;
    private static final int SECTOR_SIZE = 512;
    private CPU cpu;
    private Memory memory;
    private HardDrive hardDrive;

    public ComputerFacade() {
        this.cpu = new CPU();
        this.memory = new Memory();
        this.hardDrive = new HardDrive();
    }

    public void start(){
        cpu.freeze();
        memory.load(BOOT_ADDRESS,hardDrive.read(BOOT_SECTOR,SECTOR_SIZE));
        cpu.jump(BOOT_ADDRESS);
        cpu.execute();
    }
}
//Demo
public class FacadePatternDemo {
    public static void main(String[] args) {
        ComputerFacade computer = new ComputerFacade();
        computer.start();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/488451
推荐阅读
相关标签
  

闽ICP备14008679号