9.外观设计模式(设计模式笔记)

来源:互联网 发布:艾诺迪亚3网络矿山在哪 编辑:程序博客网 时间:2024/05/07 10:32

文章参考过其他人的案例,有改动!

分类:
1:创建型模式:
单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式;
2:结构型模式:
适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式
3:行为型模式:
模板方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,

解释器模式,状态模式,策略模式,职责链模式,访问者模式。


外观模式:
迪米特法则(最少知识原则):
一个软件实体应当尽可能少的和其他实体发生相互作用.


核心:
为子系统提供一个统一的接口,封装子系统的复杂性,便于客户端调用。


1.DrawerOne.java 

Java代码  收藏代码
  1. public class DrawerOne {  
  2.   
  3.     public void open() {  
  4.         System.out.println("第一个抽屉被打开了");  
  5.         getKey();  
  6.     }  
  7.   
  8.     public void getKey() {  
  9.         System.out.println("得到第二个抽屉的钥匙");  
  10.     }  
  11. }  

2.DrawerTwo.java 

Java代码  收藏代码
  1. public class DrawerTwo {  
  2.   
  3.         public void open() {  
  4.   
  5.                System.out.println("第二个抽屉被打开了");  
  6.   
  7.                getFile();  
  8.   
  9.         }  
  10.   
  11.         public void getFile() {  
  12.   
  13.                System.out.println("得到这个重要文件");  
  14.   
  15.         }  
  16.   
  17. }  


则通常为了拿到“重要文件”需要如下代码实现: 

Java代码  收藏代码
  1. public class Client {  
  2.   
  3.         public static void main(String[] args) {  
  4.   
  5.                DrawerOne darwerOne = new DrawerOne();  
  6.   
  7.                DrawerTwo darwerTwo = new DrawerTwo();  
  8.   
  9.                darwerOne.open();  
  10.   
  11.                darwerTwo.open();  
  12.   
  13.         }  
  14.   
  15. }  

但是如果使用Facade外观模式,可新建一个Facade类: 

Java代码  收藏代码
  1. public class DrawerFacade {  
  2.   
  3.     DrawerOne darwerOne=new DrawerOne();  
  4.   
  5.     DrawerTwo darwerTwo=new DrawerTwo();  
  6.   
  7.     public void open(){  
  8.   
  9.        darwerOne.open();  
  10.   
  11.        darwerTwo.open();  
  12.   
  13.     }  
  14.   
  15. }  


则此时调用的代码修改为: 

Java代码  收藏代码
  1. public class Client {  
  2.   
  3.         public static void main(String[] args) {  
  4.   
  5.             DrawerFacade drawer=new DrawerFacade();  
  6.   
  7.             drawer.open();  
  8.         }  
  9. }  

开发中常见的场景:
频率很高。哪里都会遇到。各种技术和框架中,都有外观模式的使用。
如:
jdbc封装后,commons提供的DBUtils类,Hibernate提供的工具类,Srping JDBC工具类等


外观模式与适配器模式的比较
1)当需要使用一个现有的类而其接口并不符合你的需要时,就是用适配器;


2)当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观;


3)适配器改变接口以符合客户的期望;


4)外观将客户从一个复杂的子系统中解耦;


5)实现一个适配器可能需要一番功夫,也可能不费功夫,视目标接口的大小与复杂度而定;


6)实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行;


7)适配器模式有两种形式:对象适配器和类适配器。类适配器需要用到多重继承;


8)可以为一个子系统实现一个以上的外观;


9)适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增加新的行为和责任;而外观将一群对象“包装”起来以简化其接口。


0 0
原创粉丝点击