您的位置:首页 > 运维架构 > 网站架构

外观模式

2016-02-18 12:44 495 查看

使用场景

在开发过程中,我们经常需要对一个应用分成不同的层次,例如经典的三层架构,就需要考虑数据访问层和逻辑处理层,逻辑处理层和表示层的层与层之间建立外观
Facade
,这样可以给复杂的子系统提供一个方便操作的简单的接口,使得耦合程度大大降低。

其次在开发过程中,子系统往往因为过多的重构而变得越来越复杂,大多数的模式使用时也会产生很多很小的类,这本是好事,但是却增加了外部调用的复杂度,这是增加一个Facade类,就能很好的解决这种情况。

在维护一个遗留的大型系统的时候,可能这个系统已经过时并且非常难以维护和扩展了,但是因为包含了很多非常重要的功能,新的需求开发必须依赖它,此时使用外观模式也是非常适合的,给新系统提供一个外观Facade类,来提供设计粗糙的旧系统比较清晰的简单的交互接口,让新系统与facade对象交互,Facade与遗留代码交互所有复杂的工作。



用例图



代码实现

package com.liran.main.DesignPattern.外观模式;

/**
* 外观模式
* 为子系统中的一组接口提供一个统一的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
* Created by LiRan on 2016-02-17.
*/
public class Facade_Pattern {

public static void main(String[] args) {

Client client = new Client(new Facade());
client.doSomeThing();

}

}

/**
* 客户端
*/

class Client {

private Facade facade;

public Client(Facade facade) {
this.facade = facade;
}

public void doSomeThing() {
facade.MethodA();
facade.MethodB();
}

}

/**
* 外观类
*/
class Facade {

private SubSystemOne systemOne;
private SubSystemTwo systemTwo;
private SubSystemThree systemThree;
private SubSystemFour systemFour;

public Facade() {

systemOne = new SubSystemOne();
systemTwo = new SubSystemTwo();
systemThree = new SubSystemThree();
systemFour = new SubSystemFour();
}

public void MethodA() {

System.out.println("方法组A---------");
systemOne.MethodOne();
systemThree.MethodThree();

}

public void MethodB() {

System.out.println("方法组B-----------");
systemTwo.MethodTwo();
systemFour.MethodFour();

}

}

/**
* 子系统类
*/
class SubSystemOne {
public void MethodOne() {
System.out.println("子系统方法一");
}
}

/**
* 子系统类
*/

class SubSystemTwo {
public void MethodTwo() {
System.out.println("子系统方法二");
}
}

/**
* 子系统类
*/

class SubSystemThree {
public void MethodThree() {
System.out.println("子系统方法三");
}
}

/**
* 子系统类
*/

class SubSystemFour {
public void MethodFour() {
System.out.println("子系统方法四");
}
}


源码下载:Github

有问题欢迎在评论中提问。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  架构