Java设计模式--外观模式

外观模式

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

Facade Pattern

Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.

类图

模式的结构与使用

外观模式的结构中包两种角色。
+ 子系统(Subsystem):子系统是若干个类的集合,这些类的实例协同合作为用户提供所需要的功能,子系统中任何类都不包含外观类的实例引用。
+ 外观(Facade):外观是一个类,该类包含子系统中全部或部分类的实例引用,当用户想要和子系统中的若干个类的实例打交道时,可以代替地和子系统的外观类的实例打交道。

简单的例子

子系统CheckWord.java

package Facade;

public class CheckWord {
    public final int basicAmount = 85;
    String advertisement;
    int amount;

    public CheckWord(String advertisement) {
        this.advertisement = advertisement;
    }

    public void setAmount() {
        this.amount = this.advertisement.length() + basicAmount;
    }

    public int getAmount() {
        return this.amount;
    }
}

子系统Charge.java

package 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

ppackage 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(this.advertisement);
        System.out.println("*****************");
    }
}

外观ClientServerFacade.java

package Facade;

public class ClientServerFacade {
    private CheckWord checkWord;
    private Charge charge;
    private TypeSeting typeSeting;
    String advertisement;
    public ClientServerFacade(String advertisement) {
        this.advertisement = advertisement;
        checkWord = new CheckWord(advertisement);
        charge = new Charge(checkWord);
        typeSeting = new TypeSeting(advertisement);
    }

    public void doAdvertisement() {
        checkWord.setAmount();
        charge.giveCharge();
        typeSeting.typeSeting();
    }

}

测试类Application.java

package Facade;

public class Application {

    public static void main(String[] args) {
        String clientAdvertisement = "电脑,价格63377,联系电话5059676";
        ClientServerFacade csf = new ClientServerFacade(clientAdvertisement);
        csf.doAdvertisement();
    }
}

运行截图

外观模式的优点

  • 使客户和子系统中的类无耦合,并且使子系统使用起来更加方便。
  • 外观只是提供了一个更加简洁的界面,并不影响用户直接使用子系统中的类。
  • 子系统中任何类对方法的内容进行修改,不影响外观类的代码。

适用外观模式的情景

  • 对于一个复杂的子系统,需要为用户提供一个简单的交互操作。
  • 不希望客户代码和子系统中的类有耦合,以便提高子系统的独立性和可移植性。
  • 当整个系统需要构建一个层次结构的子系统,不希望这些子系统相互直接的交互。

下载源码请到

MyGitHub

时间: 2024-11-01 04:08:01

Java设计模式--外观模式的相关文章

hand first设计模式 -外观模式

外观模式:提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更容易使用. Java代码 public class Light{ private String name; public Light(String name){ this.name = name; } public void on(){ System.out.println(name +" is on"); } public void off(){ System.out.println(nam

.NET设计模式-外观模式(Façade Pattern)

外观模式(Façade Pattern) --.NET设计模式系列之十二 Terrylee,2006年3月 概述 在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化.那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Façade 模式. 意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.[GOF <设计模式>] 示意

解读设计模式----外观模式(Facade Pattern)

一.模式简介 外观模式(Facade Pattern)可以将一系列复杂的类包装成一个简单的封闭接口.也称门面模式. 二.模式意图 每一种设计模式都有它的意图,我们看看设计模式的祖师们是怎么说的.按照GOF的说法,Facade模式的意图是:为了子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 三.模式UML(下图转自http://www.dofactory.com/) 四.模式参与者 门面(Facade)角色:客户端可以调用这个角色的方

[Head First设计模式]生活中学设计模式——外观模式

系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式--建造者模式 [Head First设计模式]饺子馆(冬至)中的设计模式--工厂模式 [Head First设计模式]一个人的平安夜--单例模式 [Head First设计模式]抢票中的设计模式--代理模式 [Head First设计模式]面向对象的3特征5原则 [Head First设计模式]鸭子

Java设计模式---Builder模式

之前想多写一些关于设计模式之类的东西,但是一直没写,主要是现在网上写这些的太多了,都懒的弄,反正我写这篇是写给自己做笔记的,我自己看,哼. 设计模式真的太重要了,不论是以后转学哪门语言,面向对象思想在这了,架构搭起来就会清晰些. 动手: 以前我们给model赋值的时候是这个样子的 Person person=new Person(); person.setAge(13); person.setId("33"); person.setName("薛之谦"); 这个是我

java设计模式-桥接模式(屌丝男学设计模式)

本文介绍设计模式中的桥接(Bridge)模式的概念,用法,以及实际应用中怎么样使用桥接模式进行开发. Bridge模式的概念 Bridge 模式是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任.它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展. Bridge模式的应用场景 面向对象的程序设计(OOP)里有类继承(子类继承父类)的

Java设计模式--备忘录模式

备忘录模式(别名:标记) 在不破坏封装性的前提下,捕捉一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态. Memento Pattern(Another Name: Token) Without violating encapsulation, capture and externalize an object original state so that the object can be restored to this state later. 类图

Java设计模式--模板方法模式

模板方法模式 定义一个操作中算法的骨架,而将一些步骤延迟到子类中.模板方法使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. Template Method Pattern Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorit

Java设计模式--桥接模式

桥接模式(别名:柄体模式) 将抽象部分于它的实现部分分离,使它们都可以独立地变化. Bridge Pattern(Another Name:Handle-Body) Decouple an abstraction from its implementation so that the two can vary independently. 类图 模式的结构与使用 桥接模式的结构中包括四种角色. + 抽象(Abstraction):是一个抽象类,该抽象类含有Implementor声明的变量,即维护