设计模式--外观模式

1.定义

提供一个统一接口用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用。

2.最少知识原则

定义:只和你的密友谈话。
遵循最少知识原则使我们尽量减少对象之间的交互,这个原则使我们在设计中,不要让太多类耦合在一起,避免修改系统中的一部分会影响到其他部分的情况。而外观模式则是最少知识原则的最佳实践者。
我们直接来看个图:
这里写图片描述

3.测试代码

一个形状接口,三个实现类:圆形,方形,三角形,现在client使用外观类来调用所有的形状的实现。
接口类:

/**
 * 定义形状接口
 */
public interface Shape {
    public void draw();
}

圆形:

/**
 * 定义圆形实现类
 */
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println(" this is circle shape");
    }
}

方形:

/**
 * 定义方形实现类
 */
public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println(" this is square shape");
    }
}

三角形:

/**
 * 定义三角形实现类
 */
public class Triangle implements Shape {
    @Override
    public void draw() {
        System.out.println(" this is triangle shape");
    }
}

外观类:

/**
 * 定义形状外观类
 * 为复杂的各种具体形状类提供统一供外界访问的入口
 */
public class FacadeClass {
    private Circle circle;
    private Square square;
    private Triangle triangle;

    public FacadeClass() {
        circle = new Circle();
        square = new Square();
        triangle = new Triangle();
    }

    public void drawCircle() {
        circle.draw();
    }

    public void drawSquare() {
        square.draw();
    }

    public void drawTriangle() {
        triangle.draw();
    }
}

测试入口类:

public class InitMain {
    public static void main(String[] args) {

        /**
         * 通过外观类给复杂的子系统提供统一的访问入口,外部通过外观类访问各个子系统
         * 外观类降低了外部系统与各个子系统的耦合性
         */

        //外观类
        FacadeClass facade = new FacadeClass();

        //通过访问外观类,实现与Circle子类的解耦
        facade.drawCircle();

        //通过访问外观类,实现与Square子类的解耦
        facade.drawSquare();

        //通过访问外观类,实现与Triangle子类的解耦
        facade.drawTriangle();

    }
}

4.总结

优点:外观将客户从一个复杂的子系统中解耦。减少系统之间的依赖。正在开发的系统或者遗留的一个大型系统时候,如果难以维护担有很重要,就可以使用外观模式提供一个简化接口。
缺点:不符合开闭原则(开放-关闭原则:类应该对扩展开放,对修改关闭),改东西很麻烦。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值