站在用户角度:用户做一件事,本来需要去了解做这些事的具体流程(并且这些事的流程的各个子流程是可以进行组合使用的),但是现在用户希望一个对象能够把这些流程集中在一起,用户调用这个对象的方法就可以实现这个流程而不是让用户知道这个流程是什么样子的。
站在实现者角度:满足用户需求,暴露一些方法(每个方法都是一些子流程的组合),此时实现者需要知道每个子流程相关的对象。
package com.facade; /** * 为了满足用户需求 需要有一个外观对象知道所有实现这些子流程的对象 * 并且外观对象需要调用它们 用户有事就找外观 * @author 黄二狗 * */ public class Facade { private SubSystemOne subSystemOne; private SubSystemTwo subSystemTwo; private SubSystemThree subSystemThree; //外观需要知道所有实现子流程的对象 public Facade() { subSystemOne=new SubSystemOne(); subSystemTwo=new SubSystemTwo(); subSystemThree=new SubSystemThree(); } public void methodA() { //具体子流程的排列组合 subSystemOne.MethodOne(); subSystemOne.MethodOne2(); subSystemThree.MethodThree(); } public void methodB() { subSystemOne.MethodOne2(); subSystemOne.MethodOne(); subSystemThree.MethodThree(); subSystemTwo.MethodTwo(); } }
package com.facade; /** * 子流程对象A 这些子流程一般不是同一条继承链上的对象 * @author 黄二狗 * */ public class SubSystemOne { public void MethodOne() { System.out.println("子流程对象One的第一个方法"); } public void MethodOne2() { System.out.println("子流程对象One的第二个方法"); } }
package com.facade; public class SubSystemTwo { public void MethodTwo() { System.out.println("子流程对象Two的第一个方法"); } }
package com.facade; public class SubSystemThree { public void MethodThree() { System.out.println("子流程对象Thtee的第一个方法"); } }
package com.facade; public class Client { public static void main(String[] args) { Facade facade=new Facade(); //第一套流程 facade.methodA(); System.out.println("==================分割线============================="); //第二套流程 facade.methodB(); } }
时间: 2024-11-04 19:32:29