设计模式学习与整理-外观模式

介绍

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个可以访问的接口。这种类型的设计模式属于结构型模式。
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

应用场景

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

模式结构

(1)子系统(Subsystem):子系统是若干个类的集合。这些类的实例协同合作为用户提供所需要的功能,子系统中任何类都不包含外观类的实例引用。
(2)外观(Facade):外观是一个类,该类包含子系统中全部或者部分类的实例引用。用户通过外观类来调用功能,代替了子系统中的若干个类的实例打交道。

代码案例

创建一个接口:

public interface Shape {
    void draw();
}

添加多个实现类:

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Rectangle::draw()");
    }
}
public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Square::draw()");
    }
}
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Circle::draw()");
    }
}

创建外观类:

public class ShapeMaker {
    private Shape circle;
    private Shape rectangle;
    private Shape square;

    public ShapeMaker() {
        circle = new Circle();
        rectangle = new Rectangle();
        square = new Square();
    }

    public void drawCircle(){
        circle.draw();
    }
    public void drawRectangle(){
        rectangle.draw();
    }
    public void drawSquare(){
        square.draw();
    }
}
public class ApplicationTest {
    public static void main(String[] args) {
        ShapeMaker shapeMaker = new ShapeMaker();

        shapeMaker.drawCircle();
        shapeMaker.drawRectangle();
        shapeMaker.drawSquare();
    }
}

运行结果:

优点

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值