文章参考过其他人的案例,有改动!
分类:1:创建型模式:
单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式;
2:结构型模式:
适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式
3:行为型模式:
模板方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,
解释器模式,状态模式,策略模式,职责链模式,访问者模式。
外观模式:
迪米特法则(最少知识原则):
一个软件实体应当尽可能少的和其他实体发生相互作用.
核心:
为子系统提供一个统一的接口,封装子系统的复杂性,便于客户端调用。
1.DrawerOne.java
- public class DrawerOne {
- public void open() {
- System.out.println("第一个抽屉被打开了");
- getKey();
- }
- public void getKey() {
- System.out.println("得到第二个抽屉的钥匙");
- }
- }
2.DrawerTwo.java
- public class DrawerTwo {
- public void open() {
- System.out.println("第二个抽屉被打开了");
- getFile();
- }
- public void getFile() {
- System.out.println("得到这个重要文件");
- }
- }
则通常为了拿到“重要文件”需要如下代码实现:
- public class Client {
- public static void main(String[] args) {
- DrawerOne darwerOne = new DrawerOne();
- DrawerTwo darwerTwo = new DrawerTwo();
- darwerOne.open();
- darwerTwo.open();
- }
- }
但是如果使用 Facade外观模式 ,可新建一个 Facade类 :
- public class DrawerFacade {
- DrawerOne darwerOne=new DrawerOne();
- DrawerTwo darwerTwo=new DrawerTwo();
- public void open(){
- darwerOne.open();
- darwerTwo.open();
- }
- }
则此时调用的代码修改为:
- public class Client {
- public static void main(String[] args) {
- DrawerFacade drawer=new DrawerFacade();
- drawer.open();
- }
- }
开发中常见的场景:
频率很高。哪里都会遇到。各种技术和框架中,都有外观模式的使用。
如:
jdbc封装后,commons提供的DBUtils类,Hibernate提供的工具类,Srping JDBC工具类等
外观模式与适配器模式的比较
1)当需要使用一个现有的类而其接口并不符合你的需要时,就是用适配器;
2)当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观;
3)适配器改变接口以符合客户的期望;
4)外观将客户从一个复杂的子系统中解耦;
5)实现一个适配器可能需要一番功夫,也可能不费功夫,视目标接口的大小与复杂度而定;
6)实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行;
7)适配器模式有两种形式:对象适配器和类适配器。类适配器需要用到多重继承;
8)可以为一个子系统实现一个以上的外观;
9)适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增加新的行为和责任;而外观将一群对象“包装”起来以简化其接口。