外观模式(Facade)

外观模式(Facade)

子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
这种模式涉及到一个单一的类facade类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

一、外观模式实例结构图

外观模式

二、代码实现

图形shape接口

/**
 * 定义一个形状的接口,
 * 一个画图的方法和计算面积的方法
 */
public interface Shape {
    void draw();
    double area(double a,double b);
}

Rectangle长方形实现Shape接口

/**
 * Rectangle长方形
 */
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("绘画长方形:");
    }
    @Override
    public double area(double a, double b) {
        return a*b;
    }
}

Square正方形实现Shape接口

/**
 * Square正方形
 */
public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("绘画正方形:");
    }
    @Override
    public double area(double a, double b) {
        return a*b;
    }
}

外观类

/**
 * 外观类,需要了解所欲子系统的方法或者属性
 * 进行组合以备外界调用
 */
public class Facade {
    private Shape shapeR;
    private Shape shapeS;
    public Facade() {
        shapeR = new Rectangle();
        shapeS = new Square();
    }
    public double getRectangle(double a,double b) {
        shapeR.draw();
        return shapeR.area(a, b);
    }
    public double getSquare(double a,double b) {
        shapeS.draw();
        return shapeS.area(a, b);
    }
}

客户端

    public static void main(String[] args) {
        Facade facade = new Facade();
        double recarea = facade.getRectangle(2, 5);
        double squarea =facade.getSquare(5, 8);
        System.out.println("正方形面积:"+squarea+"***"+"长方形面积:"+recarea);
    }

结果
绘画长方形:
绘画正方形:
正方形面积:40.0***长方形面积:10.0

三、Facade模式的使用

1、在设计初期阶段,应该要有意识将不同的两个层分离(如java的三层架构开发),分层降低耦合性。层与层之间建立外观facade,这样可以为复杂的子系统提供一个简单的接口从而降低耦合性。
2、子系统往往因为不断的重构演化而变得越来越复杂,大多数的模式在使用时都会产生很多很小的类,这虽然是好事,但是也给外部调用他们的用户应用程序带来了使用上的困难。增加外观Facade可以提供一个简单的接口,减少了它们的依赖。
3、在维护一个遗留的大型系统时,可能这个系统已经很难维护和扩展,但是新系统有必须要使用这个系统里的重要的功能,那么你可以为新系统卡发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰的简单接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。
主要:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口

四、优点缺点

优点:
1、减少系统相互依赖。
2、提高灵活性。
3、提高了安全性。
缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值