设计模式之外观模式

来源:互联网 发布:linux 删除文件夹失败 编辑:程序博客网 时间:2024/06/03 21:14
模式定义:

外观模式提供一个统一的接口,用来访问子系统中的一群接口。

外观模式定义了一个高层接口,让子系统更容易使用。



模式结构



模式实现
public class FacadeMode {    /**     * 刷牙     */    class Brush {        public void brush() {            System.out.println("brush teeth");        }    }    /**     * 洗脸     */    class Wash {        public void wash() {            System.out.println("wash face");        }    }    /**     * 化妆     */    class Makeup {        public void makeUp() {            System.out.println("make up");        }        public void makeDown() {            System.out.println("make down");        }    }    /**     * 包含子类对象     */    class Man {        Brush brush;        Wash wash;        Makeup makeup;        public Man(Brush brush, Wash wash, Makeup makeup) {            this.brush = brush;            this.wash = wash;            this.makeup = makeup;        }        /**         * 出发前准备         */        public void readyGo() {            System.out.println("ready go !!!");            brush.brush();            wash.wash();            makeup.makeUp();        }        /**         * 睡觉前准备         */        public void readySleep() {            System.out.println("ready sleep !!!");            makeup.makeDown();            brush.brush();            wash.wash();        }    }    /**     * 测试类     */    @Test    public void facadeTest() {        //创建子类对象        Brush brush = new Brush();        Wash wash = new Wash();        Makeup makeup = new Makeup();        //创建外观对象,并调用其方法        Man man = new Man(brush, wash, makeup);        man.readyGo();        man.readySleep();    }}



模式优点:

1、引入外观模式,是客户对子系统的使用变得简单了,减少了与子系统的关联对象,实现了子系统与客户之间的松耦合关系
2、只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类
3、降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程


模式缺点:

1、不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性
2、在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”


适用场景:

1、当要为一个复杂子系统提供一个简单接口时可以使用外观模式
2、客户程序与多个子系统之间存在很大的依赖性。引入外观类将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性

1 0
原创粉丝点击