`
zhangweieye
  • 浏览: 9772 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

设计模式学习笔记(七:外观模式)

 
阅读更多

1.1概述

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

    外观模式是简化用户和子系统进行交互的成熟模式,外观模式的关键是为子系统提供一个称作外观的类。该外观类的实例负责和子系统中的类的实例打交道。当用户想要和子系统中的若干个类的实例打交道时,可以代替地和子系统的外观类的实例打交道。

 

1.2模式的结构

外观模式的结构中包括两种角色:

(1)子系统(Subsystem):子系统是若干个类的集合。这些类的实例协同合作为用户提供所需要的功能,子系统中任何类都不包含外观类的实例引用。

(2)外观(Facade):外观是一个类,该类包含子系统中全部或者部分类的实例引用,当用户想要和子系统中的若干个类的实例打交道时,可以代替地和子系统的外观类的实例打交道。

外观模式结构的类图如下所示:

 

 

 

1.3外观模式的优点

1)使客户和子系统中的类无耦合,并且是子系统使用起来更加方便。

2)外观只是提供了一个更加简洁的界面,并不影响用户直接使用子系统中的类。

3)子系统中任何类对其方法的内容进行修改,不影响外观类的代码。

 

1.4适合使用外观模式的情景

 (1)对于一个复杂的子系统,需要为用户提供一个简单的交互操作。

 (2)不希望客户代码和子系统中的类有耦合,以便提高子系统的独立性和可移植性。

(3)当整个系统需要构建一个层次结构的子系。

 

 

1.5外观模式的具体使用

以下通过一个简单的子系统讲述外观模式中所涉及的各个角色。

报社的广告子系统有三个类CheckWordChargeTypeSeting类,各个类的职责如下:

CheckWord的实例负责检查广告内容含有的字符个数。

Charge类的实例负责计算费用。

TypeSeting的实例负责对广告进行排版。

使用String字符串来表示广告的内容,比如:

String content = “鲁花牌洗衣机,价格2356元,联系电话:1234567”;

现在,使用外观模式简化用户和上述子系统所进行的交互。比如,一个用户想要在报纸上刊登广告,那么用户只需要将广告的内容交给子系统的外观实例即可,外观的实例将负责和子系统中的类的实例进行交互完成用户所指派的任务。具体如下:

首先看一下本实例构建框架具体类和1.2模式的结构中类图的对应关系,如下图所示:

 

 

(1)子系统(Subsystem

子系统中的三个类CheckWordChargeTypeSeting,代码如下:

CheckWord.java

复制代码
package com.liuzhen.seven_facade;

public class CheckWord {
    public final int basicAmount = 85;
    String advertisement;
    int amount;
    public CheckWord(String advertisement){
        this.advertisement = advertisement;
    }
    public void setChargeAmount(){
        amount = advertisement.length() + basicAmount;  //计算出计费字符数目
    }
    public int getAmount(){
        return amount;
    }
}
复制代码

Charge.java

复制代码
package com.liuzhen.seven_facade;

public class Charge {
    public final int basicCharge = 12;
    CheckWord checkword;
    Charge(CheckWord checkword){
        this.checkword = checkword;
    }
    public void giveCharge(){
        int charge = checkword.getAmount()*basicCharge;
        System.out.println("广告费用:"+charge+"元");
    }
}
复制代码

TypeSeting.java

复制代码
package com.liuzhen.seven_facade;

public class TypeSeting {
    String advertisement;
    public TypeSeting(String advertisement){
        this.advertisement = advertisement;
    }
    public void typeSeting(){
        System.out.println("广告排版格式:");
        System.out.println("*********");
        System.out.println(advertisement);
        System.out.println("*********");
    }
}
复制代码

 

(2)外观

本问题中,外观是ServerForClient类,该类的实例含有CheckWordChargeTypeSeting类的实例引用。ClientServerFacade类代码如下:

复制代码
package com.liuzhen.seven_facade;

public class ClientServerFacade {
    private CheckWord checkWord;
    private Charge charge;
    private TypeSeting typeSeting;
    String advertisment;
    public ClientServerFacade(String advertisment){
        this.advertisment = advertisment;
        checkWord = new CheckWord(advertisment);
        charge = new Charge(checkWord);
        typeSeting = new TypeSeting(advertisment);
    }
    public void doAdvertisement(){
        checkWord.setChargeAmount();
        charge.giveCharge();
        typeSeting.typeSeting();
    }
}
复制代码

 

(3)具体使用

    通过SevenApllication类来具体实现上述相关类和接口,来实现适配器模式的运用,其代码如下:

复制代码
package com.liuzhen.seven_facade;

public class SevenApplication {
    public static void main(String args[]){
        ClientServerFacade clientFacade;
        String clientAdvertisement = "月光电脑,价格6356元,联系电话:2345123";
        clientFacade = new ClientServerFacade(clientAdvertisement);
        clientFacade.doAdvertisement();
    }
}
复制代码

 

运行结果:

广告费用:1320元
广告排版格式:
*********
月光电脑,价格6356元,联系电话:2345123
*********
分享到:
评论

相关推荐

    设计模式学习笔记大全

    以上就是压缩包中的设计模式学习笔记涉及到的主要内容。通过对这些模式的理解和应用,开发者可以更好地解决软件设计中的问题,提升软件的质量和可维护性。每种模式都有其适用场景,理解其背后的意图和应用场景是关键...

    java设计模式学习笔记

    ### Java设计模式学习笔记——外观模式(Facade Pattern) #### 概述 设计模式是软件工程领域中一种解决常见问题的可复用解决方案。在Java开发过程中,掌握设计模式能够帮助开发者更好地组织代码结构,提高代码的...

    23种设计模式学习笔记

    这个“23种设计模式学习笔记”文档将引导你深入理解这些模式,并帮助你在实际编程中有效地应用它们。以下是对23种设计模式的详细解读: 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。它常用于控制...

    设计模式学习笔记

    设计模式的学习不仅帮助我们编写更可维护、可扩展的代码,还能提高团队间的沟通效率,因为它们提供了通用的语言和解决方案。在实际开发中,灵活运用这些设计模式可以有效解决设计问题,提升代码质量。因此,深入理解...

    GoF 23种设计模式学习笔记

    "GoF 23种设计模式学习笔记" 是一个深入探讨这23个经典设计模式的资源,这些模式最初由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者在1994年的著作《设计模式:可复用面向对象软件的基础》中...

    尚硅谷设计模式源码笔记课件.zip

    1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种...

    300Java设计模式部分学习笔记

    以下是一些在尚学堂300Java设计模式部分学习笔记中涉及的设计模式的知识点: 创建型模式: 创建型模式主要解决对象创建的问题,确保系统的灵活性和封装创建细节。学习笔记中提到了5种创建型模式: 1. 单例模式...

    根据《JAVA与设计模式》整理的笔记及示例代码

    3. 外观模式:提供一个统一的接口,用来访问子系统中的多个接口。 4. 桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 5. 适配器模式:将一个类的接口转换成客户希望的另一个接口。 6. 装饰模式...

    设计模式笔记

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决问题的...设计模式笔记中的内容应该涵盖了以上所述的各种模式,通过深入学习和实践,你可以将这些模式应用到实际项目中,提升自己的编程技能和设计能力。

    《设计模式》学习笔记

    ### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...

    23中设计模式学习笔记.docx

    ### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...

    #资源大人分享计划# 设计模式学习笔记.rar

    在这个“#资源大人分享计划# 设计模式学习笔记.rar”压缩包中,我们可以期待找到一系列关于设计模式的详细学习资料,包括定义、类图、代码示例以及各种使用场景,这些都将帮助我们深入理解并掌握设计模式。...

    《设计模式:可复用面向对象软件的基础》学习并理解 23 种设计模式

    《设计模式:可复用面向对象软件的基础》一书介绍了23种经典的设计模式,这些模式大致可以分为三大类: 1. **创建型模式**:专注于对象的创建机制,确保系统在合适的时机创建正确的对象。 - **单例模式**...

    Java设计模式尚硅谷笔记

    本笔记主要涵盖了多种经典的设计模式,以下是对这些模式的详细解释: 1. 单例模式(Singleton):确保一个类只有一个实例,并提供全局访问点。在Java中,通常通过双重检查锁定(Double-Check Locking)或静态内部类...

    23种设计模式的解析与Cpp实现

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。...通过“23种设计模式的解析与C++实现.pdf”和“Source”文件,读者可以深入学习并实践这些模式,提升自己的编程技能。

    23个设计模式图解--学习笔记

    在《23个设计模式图解--学习笔记》中,我们探讨了这些模式,以便于理解和应用到实际开发中。以下是这23个设计模式的详细说明: 1. **工厂方法**(Factory Method):定义一个用于创建对象的接口,让子类决定实例化...

    台湾人写的设计模式笔记

    通过阅读这份笔记,读者不仅可以学习到设计模式的基本概念,还能了解到如何在Java环境中实际运用这些模式,提升编程技能。设计模式的学习和掌握是成为一名优秀程序员的必经之路,它们能帮助我们写出更高效、更灵活、...

    23种面向对象设计模式

    文档中的“23种设计模式学习笔记.doc”可能包含了对这23种模式的详细解释和实例,而“设计模式之我爱我家.doc”可能从一个更生活化的角度来阐述设计模式的概念。“软件23种设计模式,超级经典的.pdf”可能是对这些...

    Android学习笔记九:基本视图组件:Spinner

    本篇学习笔记将深入探讨Spinner的使用、工作原理以及如何自定义它来满足特定需求。 一、Spinner的基本用法 1. 添加Spinner到布局文件: 在XML布局文件中,通过`<Spinner>`标签添加Spinner,可以设置其属性如id、宽...

Global site tag (gtag.js) - Google Analytics