zoukankan      html  css  js  c++  java
  • Facade

    设计模式目录

    外观模式(门面模式)是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。

    外观模式结构

    核心 Java 程序库中的外观示例:

    识别方法: 外观可以通过使用简单接口, 但将绝大部分工作委派给其他类的类来识别。 通常情况下, 外观管理着其所使用的对象的完整生命周期。

    样例

    // 这里有复杂第三方视频转换框架中的一些类。我们不知晓其中的代码,因此无法
    // 对其进行简化。
    
    class VideoFile
    // ...
    
    class OggCompressionCodec
    // ...
    
    class MPEG4CompressionCodec
    // ...
    
    class CodecFactory
    // ...
    
    class BitrateReader
    // ...
    
    class AudioMixer
    // ...
    
    
    // 为了将框架的复杂性隐藏在一个简单接口背后,我们创建了一个外观类。它是在
    // 功能性和简洁性之间做出的权衡。
    class VideoConverter is
        method convert(filename, format):File is
            file = new VideoFile(filename)
            sourceCodec = new CodecFactory.extract(file)
            if (format == "mp4")
                destinationCodec = new MPEG4CompressionCodec()
            else
                destinationCodec = new OggCompressionCodec()
            buffer = BitrateReader.read(filename, sourceCodec)
            result = BitrateReader.convert(buffer, destinationCodec)
            result = (new AudioMixer()).fix(result)
            return new File(result)
    
    // 应用程序的类并不依赖于复杂框架中成千上万的类。同样,如果你决定更换框架,
    // 那只需重写外观类即可。
    class Application is
        method main() is
            convertor = new VideoConverter()
            mp4 = convertor.convert("funny-cats-video.ogg", "mp4")
            mp4.save()
    

    外观模式优点

    • 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。
    • 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。
    • 降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程,因为编译一个子系统不会影响其他的子系统,也不会影响外观对象。

    外观模式缺点

    • 不能很好地限制客户使用子系统类,很容易带来未知风险。
    • 增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。
  • 相关阅读:
    4.比赛F
    4.M
    4.H
    4.J
    4.G
    4.D
    4.C
    UVA 215 Spreadsheet Calculator (模拟)
    POJ 3469 Dual Core CPU(最小割模型的建立)
    POJ 3281 Dining(网络流最大匹配)
  • 原文地址:https://www.cnblogs.com/huaranmeng/p/14299515.html
Copyright © 2011-2022 走看看