23种设计模式_MODE09外观模式_手写代码实现

23种设计模式_MODE09外观模式_手写代码实现_第1张图片

1.外观模式测试

package com.zhaoshuangjian.mode09_外观模式;

import com.zhaoshuangjian.mode09_外观模式.mode09.FacadeAB;
import com.zhaoshuangjian.mode09_外观模式.mode09.ModuleA.FacadeA;
import com.zhaoshuangjian.mode09_外观模式.mode09.ModuleA.SubSystemA;
import com.zhaoshuangjian.mode09_外观模式.mode09.ModuleA.SubSystemB;
import com.zhaoshuangjian.mode09_外观模式.mode09.ModuleB.FacadeB;
import com.zhaoshuangjian.mode09_外观模式.mode09.ModuleB.SubSystemC;
import com.zhaoshuangjian.mode09_外观模式.mode09.ModuleB.SubSystemD;

/**
 * 

外观模式测试

* * @Author zhaoshuangjian 2023-03-25 上午10:39 */ public class FacadeTest { public static void main(String[] args) { /** * 不使用外观模式,直接使用智能人工系统的模块A和模块B的功能 * 缺点:用户必须清楚模块中的各个子系统的工作流程,否则会导致系统的不正常工作 */ useModuleA(); useModuleB(); /** * 使用外观模式A和外观模式B * 缺点:依然不够简洁 */ useModuleAByFacadeA(); useModuleAByFacadeB(); /** * 使用外观模式AB * 优点:用户使用系统,相当的便捷,没有多余的废话 */ useSystemByFacadeAB(); /** * 通过以上的对比,想必大家已经知道了什么时候该用外观模式,什么时候直接调用子模块 * 另外插一句:装饰模式、代理模式以及刚刚才学到的外观模式,其模板就是参照的对象适配器来着的 * 因此,你会有种似曾相识的感觉 * 设计模式不是一天两天就能悟的透的,它是一个长期而漫长的过程 * 一旦你领悟到其中的门道,开发项目+写代码将会是一门艺术 */ } /** * 不使用外观模式,直接使用模块A的功能 */ private static void useModuleA(){ partition("直接使用模块A中的功能"); SubSystemA subSystemA = new SubSystemA(); SubSystemB subSystemB = new SubSystemB(); subSystemA.initSystem(); subSystemB.loadDatas(); } /** * 不使用外观模式,直接使用模块B的功能 */ private static void useModuleB(){ partition("直接使用模块B中的功能"); SubSystemC subSystemC = new SubSystemC(); SubSystemD subSystemD = new SubSystemD(); subSystemC.sayHello(); subSystemD.working(); } /** * 使用外观模式A,对模块A中的功能进行"屏蔽" */ private static void useModuleAByFacadeA(){ partition("使用外观模式A"); FacadeA facadeA = new FacadeA(); facadeA.initialize(); } /** * 使用外观模式B,对模块B中的功能进行"屏蔽" */ private static void useModuleAByFacadeB(){ partition("使用外观模式A"); FacadeB facadeB = new FacadeB(); facadeB.work(); } /** * 使用外观模式AB,对外观模式A和B再进行一次"屏蔽" */ private static void useSystemByFacadeAB(){ partition("使用外观模式AB"); FacadeAB facadeAB = new FacadeAB(); facadeAB.startSystem(); } private static void partition(String note){ System.out.println("============== 分割线【"+note+"】 =============="); } }

2.外观模式AB == 聚合子模块A和子模块B的功能,降低客户端使用模块A和模块B的复杂度

package com.zhaoshuangjian.mode09_外观模式.mode09;

import com.zhaoshuangjian.mode09_外观模式.mode09.ModuleA.FacadeA;
import com.zhaoshuangjian.mode09_外观模式.mode09.ModuleB.FacadeB;

/**
 * 

外观模式AB == 聚合子模块A和子模块B的功能,降低客户端使用模块A和模块B的复杂度

* * @Author zhaoshuangjian 2023-03-25 上午10:39 */ public class FacadeAB { private FacadeA facadeA; private FacadeB facadeB; public FacadeAB(){ facadeA = new FacadeA(); facadeB = new FacadeB(); } public void startSystem(){ facadeA.initialize(); facadeB.work(); } }

3.外观模式A == 聚合子模块A中的子系统A和B,降低客户端操作子模块A的复杂度

package com.zhaoshuangjian.mode09_外观模式.mode09.ModuleA;

/**
 * 

外观模式A == 聚合子模块A中的子系统A和B,降低客户端操作子模块A的复杂度

* * @Author zhaoshuangjian 2023-03-25 上午10:39 */ public class FacadeA { private SubSystemA subSystemA; private SubSystemB subSystemB; public FacadeA(){ subSystemA = new SubSystemA(); subSystemB = new SubSystemB(); } /** * 将模块A的功能封装一下,松散客户端与A模块中的各个子系统间的耦合关系 * 让模块中的各个子系统更容易扩展和维护 */ public void initialize(){ subSystemA.initSystem(); subSystemB.loadDatas(); } }

4.模块A下的子系统A

package com.zhaoshuangjian.mode09_外观模式.mode09.ModuleA;

/**
 * 

模块A下的子系统A

* * @Author zhaoshuangjian 2023-03-25 上午10:39 */ public class SubSystemA { public void initSystem(){ System.out.println("人工智能系统正在启动,请您稍等.... =====>"+this); for(int i = 0; i < 3; i++){ try { System.out.println("等待"+(i+1)+"s"); Thread.sleep(1000); }catch (InterruptedException ex){ System.out.println(ex.getClass()+","+ ex.getMessage()); } } } @Override public String toString(){ return "人工智能系统,模块A,子系统A,主要负责启动系统"; } }

5.模块A下的子系统B

package com.zhaoshuangjian.mode09_外观模式.mode09.ModuleA;

/**
 * 

模块A下的子系统B

* * @Author zhaoshuangjian 2023-03-25 上午10:39 */ public class SubSystemB { public void loadDatas(){ System.out.println("人工智能系统已经启动,正在加载数据 =====>"+this); System.out.println("........."); System.out.println("数据已完成加载"); } @Override public String toString(){ return "人工智能系统,模块A,子系统B,主要负责加载数据"; } }

6.外观模式B == 聚合子模块B中的子系统C和D,降低客户端操作子模块B的复杂度

package com.zhaoshuangjian.mode09_外观模式.mode09.ModuleB;

/**
 * 

外观模式B == 聚合子模块B中的子系统C和D,降低客户端操作子模块B的复杂度

* * @Author zhaoshuangjian 2023-03-25 上午10:39 */ public class FacadeB { private SubSystemC subSystemC; private SubSystemD subSystemD; public FacadeB(){ subSystemC = new SubSystemC(); subSystemD = new SubSystemD(); } /** * 将模块A的功能封装一下,松散客户端与A模块中的各个子系统间的耦合关系 * 让模块中的各个子系统更容易扩展和维护 */ public void work(){ subSystemC.sayHello(); subSystemD.working(); } }

7.模块B下的子系统C

package com.zhaoshuangjian.mode09_外观模式.mode09.ModuleB;

/**
 * 

模块B下的子系统C

* * @Author zhaoshuangjian 2023-03-25 上午10:39 */ public class SubSystemC { public void sayHello(){ System.out.println("欢迎进入Appleyk's 基于电影知识图谱的人工智能系统 =====>"+this); System.out.println("关于系统的介绍请参考博文:https://blog.csdn.net/Appleyk/article/details/80422055"); } @Override public String toString(){ return "人工智能系统,模块B,子系统C,欢迎界面"; } }

8.模块B下的子系统D

package com.zhaoshuangjian.mode09_外观模式.mode09.ModuleB;

/**
 * 

模块B下的子系统D

* * @Author zhaoshuangjian 2023-03-25 上午10:39 */ public class SubSystemD { public void working(){ System.out.println("亲爱的用户,以下是你18年截止到今天看的电影的大数据统计结果:=====>"+this); System.out.println("《《《《 ========== 》》》》》\n爱情动作片:10次\n" + "恐怖片:1次\n" + "喜剧片:6次\n" + "总花费:680.5元\n" + "《《《《 ========== 》》》》》"); } @Override public String toString(){ return "人工智能系统,模块B,子系统D,开始工作"; } }

你可能感兴趣的:(三,设计模式,设计模式,外观模式,代理模式)