java设计模式--结构型模式--外观模式

 1                                             外观模式
 2  概述
 3     为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
 4
 5
 6  适用性
 7     1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越
 8       复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容
 9       易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。
10       Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需
11       要更多的可定制性的用户可以越过facade层。
12
13     2.客户程序与抽象类的实现部分之间存在着很大的依赖性。引入facade将这个子系统与客
14       户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
15
16     3.当你需要构建一个层次结构的子系统时,使用facade模式定义子系统中每层的入口点。
17       如果子系统之间是相互依赖的,你可以让它们仅通过facade进行通讯,从而简化了它们
18       之间的依赖关系。
19
20
21  参与者
22     1.Facade
23       知道哪些子系统类负责处理请求。
24       将客户的请求代理给适当的子系统对象。
25
26     2.Subsystemclasses
27       实现子系统的功能。
28       处理由Facade对象指派的任务。
29       没有facade的任何相关信息;即没有指向facade的指针。

测试类:

 1 public class Test {
 2
 3     public static void main(String[] args) {
 4         ServiceA sa = new ServiceAImpl();
 5         ServiceB sb = new ServiceBImpl();
 6
 7         sa.methodA();
 8         sb.methodB();
 9
10         System.out.println("========");
11         //facade
12         Facade facade = new Facade();
13         facade.methodA();
14         facade.methodB();
15     }
16 }
1 public interface ServiceA {
2     public void methodA();
3 }
1 public class ServiceAImpl implements ServiceA {
2
3     public void methodA() {
4         System.out.println("这是服务A");
5     }
6 }
1 public interface ServiceB {
2     public void methodB();
3 }
1 public class ServiceBImpl implements ServiceB {
2
3     public void methodB() {
4         System.out.println("这是服务B");
5     }
6 }
1 public interface ServiceC {
2     public void methodC();
3 }
1 public class ServiceCImpl implements ServiceC {
2
3     public void methodC() {
4         System.out.println("这是服务C");
5     }
6 }
 1 public class Facade {
 2
 3     ServiceA sa;
 4
 5     ServiceB sb;
 6
 7     ServiceC sc;
 8
 9     public Facade() {
10         sa = new ServiceAImpl();
11         sb = new ServiceBImpl();
12         sc = new ServiceCImpl();
13     }
14
15     public void methodA() {
16         sa.methodA();
17         sb.methodB();
18     }
19
20     public void methodB() {
21         sb.methodB();
22         sc.methodC();
23     }
24
25     public void methodC() {
26         sc.methodC();
27         sa.methodA();
28     }
29 }
时间: 2024-11-04 19:37:35

java设计模式--结构型模式--外观模式的相关文章

设计模式(结构型)之外观模式(Facade Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之装饰者模式(Decorator Pattern)>http://blog.csdn.net/yanbober/article/details/45395747 概述 一个客户类需要和多个业务类交互,而这些业务类经常会作为整体出现,由于涉及到的类比较多,导致使

设计模式(结构型)之组合模式(Composite Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之桥接模式(Bridge Pattern)> http://blog.csdn.net/yanbober/article/details/45366781 概述 组合模式又叫做部分-整体模式,使我们在树型结构的问题中模糊简单元素和复杂元素的概念,客户程序可以像

Java设计模式(五)外观模式 桥梁模式

(九)外观模式 外观模式为子系统提供一个接口,便于使用.解决了类与类之间关系的,外观模式将类之间的关系放在一个 Facade 类中,降低了类类之间的耦合度,该模式不涉及接口. class CPU { public void startup(){ System.out.println("cpu start"); } public void shutdown(){ System.out.println("cpu stop"); } } class Memory { pu

设计模式(结构型)之代理模式(Proxy Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之享元模式(Flyweight Pattern)>http://blog.csdn.net/yanbober/article/details/45477551 概述 代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个

&quot;围观&quot;设计模式(14)--结构型之外观模式(Facade Pattern)

外观模式(Facade pattern),是软件工程中常用的一种软件设计模式,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用.----WIKIPEDIA 个人理解 当一个项目中出现比较杂乱的调用关系时,类与类之间的耦合关系过于复杂,为了降低耦合度,我们可以采用一个公共的接口与其他类发生耦合,这样可以尽量大的降低外界与该系统的耦合度,同时降低了整个系统的复杂度,外观模式相当于一个公共的入口一样,为使用者敞开大门,暴漏一些必要的接口,方便外界进行调用.通俗来讲就是,有多个不同的类

Java设计模式菜鸟系列(九)外观模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39805735 外观模式(Facade):是为了解决类与类之间的依赖关系的,像spring一样,可以将类与类之间的关系配置到配置文件中,而外观模式就是将他们的 关系放在一个Facade类中,降低了类与类之间的耦合度,该模式中没有涉及到接口. 一.uml建模: 二.代码实现: /** * 示例:外观模式,也称门面模式 * * 优点:为了解决类与类之间的依赖关系,降低了类与类之间的耦合度 *

java设计模式--结构型模式--组合模式

什么是组合模式,这个有待研究,个人觉得是各类组合而形成的一种结构吧. 组合模式: 1 组合模式 2 概述 3 将对象组合成树形结构以表示"部分-整体"的层次结构."Composite使得用户对单个对象和组合对象的使用具有一致性." 4 5 6 适用性 7 1.你想表示对象的部分-整体层次结构. 8 9 2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象. 10 11 12 参与者 13 1.Component 14 为组合中的对象声明接

java设计模式--结构型模式--享元模式

享元模式 概述 运用共享技术有效地支持大量细粒度的对象. 适用性 当都具备下列情况时,使用Flyweight模式: 1.一个应用程序使用了大量的对象. 2.完全由于使用大量的对象,造成很大的存储开销. 3.对象的大多数状态都可变为外部状态. 4.如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象. 5.应用程序不依赖于对象标识.由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值. 参与者 1.Flyweight 描述一个接口,通过这个接口flywe

java设计模式--结构型模式--装饰模式

1 装饰模式 2 概述 3 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 4 5 6 适用性 7 1.在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职责. 8 9 2.处理那些可以撤消的职责. 10 11 3.当不能采用生成子类的方法进行扩充时. 12 参与者 13 1.Component 14 定义一个对象接口,可以给这些对象动态地添加职责. 15 16 2.ConcreteComponent 17 定义一个对象,可以给这个对象添