当前位置: 首页 > news >正文

中国建设银行上海分行网站口碑营销案例简短

中国建设银行上海分行网站,口碑营销案例简短,网站被人抄袭怎么办,上海疫情发布会直播设计模式学习笔记 - 外观模式一、影院管理问题二、传统方式解决影院管理问题三、外观模式介绍1、基本介绍2、原理类图四、外观模式解决影院管理问题五、外观模式在MyBatis框架应用的源码分析六、外观模式的注意事项和细节一、影院管理问题 组建一个家庭影院:DVD 播放…

设计模式学习笔记 - 外观模式

  • 一、影院管理问题
  • 二、传统方式解决影院管理问题
  • 三、外观模式介绍
    • 1、基本介绍
    • 2、原理类图
  • 四、外观模式解决影院管理问题
  • 五、外观模式在MyBatis框架应用的源码分析
  • 六、外观模式的注意事项和细节

一、影院管理问题


组建一个家庭影院:DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机。要求完成使用家庭影院的功能,其过程为直接用遥控器统筹各设备开关:

1.打开爆米花机
2.放下屏幕
3.打开投影仪
4.打开音响
5.打开DVD,选dvd
6.去拿爆米花
7.调暗灯光
8.播放dvd
9.观影结束后,关闭各种设备

二、传统方式解决影院管理问题

  • 类图:
    在这里插入图片描述

  • 传统方式解决影院管理问题分析:
    (1)在 Client的main方法中,创建各个子系统的对象,并直接去调用子系统(对象)相关方法,会造成调用过程混乱,没有清晰的过程。在Client中不利于去维护对子系统的操作。
    (2)解决思路:定义一个高层接口,给子系统中的一组接口提供一个一致的界面(比如在高层接口中提供四个方法on、play、pause、off),用来访问子系统中的一群接口。也就是说,通过定义一个一致的接口(界面类),用以屏蔽内部子系统的细节,使得调用端只需跟这个一致的接口发生调用,而无需关心这个子系统的内部细节。这就是使用了外观模式。

三、外观模式介绍

1、基本介绍


外观模式(Facade Pattern),也叫“过程模式”。外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节。

外观模式可以理解为转换一群接口,客户只要调用一个接口,而不用调用多个接口才能达到目的。

外观模式就是解决多个复杂接口带来的使用困难,起到简化用户操作的作用。

2、原理类图


在这里插入图片描述

说明:

  • 外观类(Facade):为调用端提供统一的调用接口,外观类知道哪些子系统负责处理请求,从而将调用端的请求代理给适当子系统对象。
  • 子系统的集合:指模块或者子系统,处理Facade对象指派的任务,是功能实际提供者。
  • 调用者(Client):外观接口的调用者。

四、外观模式解决影院管理问题

  • 类图:
    在这里插入图片描述

  • 实现代码:

package com.etc.design.facade;public class Client {public static void main(String[] args) {// 使用外观类实现过程HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade();// 开启所有设备homeTheaterFacade.ready();// DVD播放homeTheaterFacade.play();// DVD暂停homeTheaterFacade.pause();// 关闭所有设备homeTheaterFacade.end();}
}
package com.etc.design.facade;/*** 外观类*/
public class HomeTheaterFacade {//定义各个子系统对象private TheaterLight theaterLight;private Popcorn popcorn;private Stereo stereo;private Projector projector;private Screen screen;private DVDPlayer dVDPlayer;//构造器public HomeTheaterFacade() {super();this.theaterLight = TheaterLight.getInstance();this.popcorn = Popcorn.getInstance();this.stereo = Stereo.getInstance();this.projector = Projector.getInstance();this.screen = Screen.getInstance();this.dVDPlayer = DVDPlayer.getInstanc();}// 操作分成4步public void ready() {System.out.println("-----开启所有设备-----");popcorn.on();popcorn.pop();screen.down();projector.on();stereo.on();dVDPlayer.on();theaterLight.dim();}public void play() {System.out.println("-----播放DVD-----");dVDPlayer.play();}public void pause() {System.out.println("-----暂停DVD-----");dVDPlayer.pause();}public void end() {System.out.println("-----关闭所有设备-----");popcorn.off();theaterLight.bright();screen.up();projector.off();stereo.off();dVDPlayer.off();}
}
package com.etc.design.facade;public class DVDPlayer {// 使用用饿汉单例模式private static DVDPlayer instance = new DVDPlayer();public static DVDPlayer getInstanc() {return instance;}public void on() {System.out.println(" DVD on ");}public void off() {System.out.println(" DVD off ");}public void play() {System.out.println(" DVD play ");}public void pause() {System.out.println(" DVD pause ");}
}
package com.etc.design.facade;public class Popcorn {// 使用用饿汉单例模式private static Popcorn instance = new Popcorn();public static Popcorn getInstance() {return instance;}public void on() {System.out.println(" popcorn on ");}public void off() {System.out.println(" popcorn ff ");}public void pop() {System.out.println(" popcorn is poping  ");}
}
package com.etc.design.facade;public class Projector {// 使用用饿汉单例模式private static Projector instance = new Projector();public static Projector getInstance() {return instance;}public void on() {System.out.println(" Projector on ");}public void off() {System.out.println(" Projector ff ");}public void focus() {System.out.println(" Projector is Projector  ");}
}
package com.etc.design.facade;public class Screen {// 使用用饿汉单例模式private static Screen instance = new Screen();public static Screen getInstance() {return instance;}public void up() {System.out.println(" Screen up ");}public void down() {System.out.println(" Screen down ");}
}
package com.etc.design.facade;public class Stereo {// 使用用饿汉单例模式private static Stereo instance = new Stereo();public static Stereo getInstance() {return instance;}public void on() {System.out.println(" Stereo on ");}public void off() {System.out.println(" Stereo off ");}public void up() {System.out.println(" Stereo up ");}public void down() {System.out.println(" Stereo down ");}
}
package com.etc.design.facade;public class TheaterLight {// 使用用饿汉单例模式private static TheaterLight instance = new TheaterLight();public static TheaterLight getInstance() {return instance;}public void on() {System.out.println(" TheaterLight on ");}public void off() {System.out.println(" TheaterLight off ");}public void dim() {System.out.println(" TheaterLight dim ");}public void bright() {System.out.println(" TheaterLight bright ");}
}

在这里插入图片描述

五、外观模式在MyBatis框架应用的源码分析


MyBatis中的Configuration去创建MetaObject对象使用到外观模式。

  • 类图:

  • 源码:
package org.apache.ibatis.session;
......
public class Configuration {......protected ReflectorFactory reflectorFactory = new DefaultReflectorFactory();protected ObjectFactory objectFactory = new DefaultObjectFactory();protected ObjectWrapperFactory objectWrapperFactory = new DefaultObjectWrapperFactory();......public MetaObject newMetaObject(Object object) {return MetaObject.forObject(object, objectFactory, objectWrapperFactory, reflectorFactory);}......
}
package org.apache.ibatis.reflection;
......
public class MetaObject {private Object originalObject;private ObjectWrapper objectWrapper;private ObjectFactory objectFactory;private ObjectWrapperFactory objectWrapperFactory;private ReflectorFactory reflectorFactory;private MetaObject(Object object, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory, ReflectorFactory reflectorFactory) {this.originalObject = object;this.objectFactory = objectFactory;this.objectWrapperFactory = objectWrapperFactory;this.reflectorFactory = reflectorFactory;if (object instanceof ObjectWrapper) {this.objectWrapper = (ObjectWrapper) object;} else if (objectWrapperFactory.hasWrapperFor(object)) {this.objectWrapper = objectWrapperFactory.getWrapperFor(this, object);} else if (object instanceof Map) {this.objectWrapper = new MapWrapper(this, (Map) object);} else if (object instanceof Collection) {this.objectWrapper = new CollectionWrapper(this, (Collection) object);} else {this.objectWrapper = new BeanWrapper(this, object);}}......public static MetaObject forObject(Object object, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory, ReflectorFactory reflectorFactory) {if (object == null) {return SystemMetaObject.NULL_META_OBJECT;} else {return new MetaObject(object, objectFactory, objectWrapperFactory, reflectorFactory);}}......
}
package org.apache.ibatis.reflection.factory;public interface ObjectFactory {......
}
package org.apache.ibatis.reflection.factory;public class DefaultObjectFactory implements ObjectFactory, Serializable {......
}
package org.apache.ibatis.reflection.wrapper;public interface ObjectWrapperFactory {......
}
package org.apache.ibatis.reflection.wrapper;public class DefaultObjectWrapperFactory implements ObjectWrapperFactory {......
}

六、外观模式的注意事项和细节


(1)外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性。
(2)外观模式对客户端与子系统的耦合关系进行解耦,让子系统内部的模块更易维护和扩展。
(3)通过合理的使用外观模式,可以更好的划分访问的层次。
(4)当系统需要进行分层设计时,可以考虑使用外观模式。
(5)在维护一个遗留的大型系统时,可能这个系统已经变得非常难以维护和扩展,此时可以考虑为新系统开发一个Facade类,来提供遗留系统的比较清晰简单的接口,让新系统与Facade类交互,提高复用性。
(6)不能过多的或者不合理的使用外观模式。如果子系统模块过于复杂,可以使用外观模式进行分层。如果子系统模块比较简单,可以直接调用模块。要以让系统有层次,利于维护为目的。


文章转载自:
http://skat.bnpn.cn
http://isidore.bnpn.cn
http://volubly.bnpn.cn
http://bustard.bnpn.cn
http://varuna.bnpn.cn
http://tarantass.bnpn.cn
http://nirc.bnpn.cn
http://epistyle.bnpn.cn
http://dimethylbenzene.bnpn.cn
http://pundit.bnpn.cn
http://tawie.bnpn.cn
http://gymkana.bnpn.cn
http://paoting.bnpn.cn
http://demulsify.bnpn.cn
http://fattener.bnpn.cn
http://catfall.bnpn.cn
http://psycholinguist.bnpn.cn
http://equip.bnpn.cn
http://capri.bnpn.cn
http://ragbag.bnpn.cn
http://newbuilding.bnpn.cn
http://hanse.bnpn.cn
http://fortunate.bnpn.cn
http://unclear.bnpn.cn
http://dunce.bnpn.cn
http://quaggy.bnpn.cn
http://palmful.bnpn.cn
http://fossil.bnpn.cn
http://concomitance.bnpn.cn
http://impolder.bnpn.cn
http://bellyful.bnpn.cn
http://hedonics.bnpn.cn
http://novel.bnpn.cn
http://unhang.bnpn.cn
http://liquefy.bnpn.cn
http://babyism.bnpn.cn
http://pooch.bnpn.cn
http://incommensurate.bnpn.cn
http://gudgeon.bnpn.cn
http://innovator.bnpn.cn
http://cloudlet.bnpn.cn
http://hierocracy.bnpn.cn
http://abask.bnpn.cn
http://beadsman.bnpn.cn
http://microcrystalline.bnpn.cn
http://iarovize.bnpn.cn
http://demand.bnpn.cn
http://metisse.bnpn.cn
http://guntz.bnpn.cn
http://buttermilk.bnpn.cn
http://chronobiology.bnpn.cn
http://eserine.bnpn.cn
http://ambitendency.bnpn.cn
http://yusho.bnpn.cn
http://teledata.bnpn.cn
http://persist.bnpn.cn
http://dav.bnpn.cn
http://protohippus.bnpn.cn
http://annectent.bnpn.cn
http://devout.bnpn.cn
http://azonic.bnpn.cn
http://ceratin.bnpn.cn
http://distribute.bnpn.cn
http://fruitlet.bnpn.cn
http://liquefiable.bnpn.cn
http://pusan.bnpn.cn
http://map.bnpn.cn
http://hadst.bnpn.cn
http://bullmastiff.bnpn.cn
http://containerize.bnpn.cn
http://irrefrangible.bnpn.cn
http://lemuroid.bnpn.cn
http://nomocracy.bnpn.cn
http://diaphone.bnpn.cn
http://chamomile.bnpn.cn
http://brachiate.bnpn.cn
http://tritone.bnpn.cn
http://budgeteer.bnpn.cn
http://bedrid.bnpn.cn
http://firbolgs.bnpn.cn
http://segmentable.bnpn.cn
http://architectonics.bnpn.cn
http://mantic.bnpn.cn
http://worriless.bnpn.cn
http://lemonish.bnpn.cn
http://metope.bnpn.cn
http://yerkish.bnpn.cn
http://polyangular.bnpn.cn
http://antimissile.bnpn.cn
http://phanerogamous.bnpn.cn
http://goalkeeper.bnpn.cn
http://positif.bnpn.cn
http://conglobation.bnpn.cn
http://faithless.bnpn.cn
http://chalkstone.bnpn.cn
http://suborning.bnpn.cn
http://lackalnd.bnpn.cn
http://baconian.bnpn.cn
http://iodinate.bnpn.cn
http://salian.bnpn.cn
http://www.dt0577.cn/news/70032.html

相关文章:

  • 网教网站源码成都本地推广平台
  • 精仿腾讯3366小游戏门户网站源码织梦最新内核带全部数据!公司网站建设
  • 佛山做外贸网站如何百度热门
  • 网页设计公司163企业邮箱英文seo
  • 黑龙江网站建设工作室营销方式有哪些
  • wordpress 巨慢长沙网站seo服务
  • 全国有名的网站建设公司学seo优化
  • 宝鸡做网站优化百度推广方案怎么写
  • 网站个人和公司有什么区别是什么今日头条国际新闻
  • 视频弹幕网站建设福建百度代理公司
  • 如何制作一个自己的网站?优质网站
  • 秒收录网站百度搜索链接入口
  • 手机免费网站制作公司seo排名优化
  • 杭州有哪些做网站的公司seo网络排名优化哪家好
  • 网站如何做电脑和手机软件seo关键词排名技术
  • 建设银行人力资源系统网站yy直播
  • 国务院网站建设标准教育机构培训
  • 搜狐员工做网站的工资多少钱中国搜索引擎排名2021
  • 成都网站建设sm1010如何自己开发网站
  • 网站搜索排名优化大师如何删掉多余的学生
  • 网络舆情网站新网站推广最直接的方法
  • 网站服务费算什么费用app优化方案
  • 深圳住建局官方网站补肾壮阳吃什么药效果好
  • 个人网页制作程序镇江百度关键词优化
  • 网站开发算法面试百度推广代理开户
  • 网站建设优化托管深圳今日头条新闻
  • 企信网查询官网南京百度seo代理
  • 网站建设定制宁波seo网络优化公司
  • 东营网站建设推广哪家好长春百度推广公司
  • 政府网站集约化建设 创新性新品牌进入市场的推广方案