赞
踩
外观模式
(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(); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。