![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
TcWong
Java开发工程师
展开
-
设计模式系列--门面模式
定义门面模式又叫外观模式,提供了一个统一的接口,用来访问子系统中的一群接口。门面模式定义了一个高层接口,简化了调用过程,无需深入了解子系统,以防给子系统带来风险;减少系统依赖、松散耦合;更好的划分访问层次,提高了安全性;遵循迪米特法则,即最少知道原则实现在我们平常外出旅游时,需要乘坐交通工具,看地图,在线支付等。假如我们把旅行独立一个系统,地图独立一个系统,支付独立一个系统。在客户端看来,需要三个不同系统间的调用。使用门面模式后,我们只需要对客户端提供唯一的入口,三个系统交给门面类管理用户 Us原创 2020-12-02 14:51:23 · 165 阅读 · 0 评论 -
设计模式系列--解释器模式
定义解释器模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。在解释器模式中由于语法是由很多类表示的,当语法规则更改时,只需修改相应的非终结符表达式即可;若扩展语法时,只需添加相应非终结符类即可。特征:为了解释一种语言,而为语言创建的解释器。实现给出一个运算表达式,根据解释器模式计算出相应的结果类结构图数字计算解释器接口 IArithmeticInterpreterpublic interface IArithmeticInterprete原创 2020-11-26 15:32:52 · 74 阅读 · 0 评论 -
设计模式系列--中介者模式
定义中介者模式又称为调解者模式或者调停者模式。用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦和松散,而且可以独立地改变它们之间的交互。核心:通过中介者解耦系统各层次对象的直接耦合,层次对象的对外依赖通信统统交给中介者转发。如上图,在未引入中介者之前,各个系统之间(特别多系统交互)耦合度太高,引用关系错综复杂。在引入中介者后,只需要把各自功能注册到中介者,由中介者来管理各个系统间的调用。实现在我们日常的微信、QQ多人聊天中,发信息时无需给群组的每个人发一遍,只需原创 2020-11-25 18:13:53 · 92 阅读 · 0 评论 -
设计模式系列--备忘录模式
定义备忘录模式又称为快照模式或令牌模式,是指在不破坏封装的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。备忘录模式可以简化发起人实体类职责,隔离状态存储与获取,实现了信息的封装,客户端无需关心状态的保存细节;备忘录可以提供状态回滚功能。但同样,由于状态的存储,备忘录模式也会带来相应的内存消耗问题。实现在我们日常的office 软件、图形软件操作中,一般都具有撤销回退功能。文本版本保存类 ArticleMementopublic class原创 2020-11-20 15:54:31 · 56 阅读 · 0 评论 -
设计模式系列--状态模式
定义状态模式也称为状态机模式,是允许对象在内部状态发生变化时改变它的行为,对象看起来好像修改了它的类。通常的对象内部都是使用数值类型来定义状态,状态的切换是通过赋值进行表现,不够直观;而使用状态类,在切换状态时,是以不同的类进行表示,转换目的更加明确。实现在我们日常接触的微信公众号或者微博中,好多场景都需要用户先登陆,然后才可以进行点赞、收藏、评论等。在整个流程中,用户从未登陆状态转变成登陆状态。抽象用户状态 AbstractUserStatepublic abstract class Abst原创 2020-11-19 16:05:37 · 98 阅读 · 0 评论 -
设计模式系列--观察者模式
定义观察者模式定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主体对象。当主体对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新。观察者模式主要用于在关联行为之间建立一套触发机制的场景,支持广播通信。观察者模式也被称为 发布-订阅模式。实现场景:新闻社开发了一套新闻订阅服务,他们会给每个订阅了该服务的用户推送早间新闻邮件。邮件服务器 MailServerpublic class MailServer extends Observable { private static M原创 2020-10-20 19:14:31 · 90 阅读 · 0 评论 -
设计模式系列--装饰者模式
定义装饰者模式是指在不改变原有对象的基础上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能)用于扩展一个类的功能或给一个类添加附加职责。动态的给一个对象添加功能,这些功能可以再动态的撤销。实现我们在购买新房的时候,一般都是毛坯房。所以在装修的时候,每增加一点设施,就会增加成本。抽象类 房间 AbstractRoompublic abstract class AbstractRoom { abstract String addFurniture(); abstra原创 2020-10-12 20:28:46 · 92 阅读 · 0 评论 -
设计模式系列--适配器模式
定义适配器模式是指将一个类的接口转换成客户期望的另一个接口,使原本的接口不兼容的类可以一起工作。适配器模式是对已存在模型进行向上或者向下兼容提供的一种解决方案。实现现实中经常出现的一种场景:我们在海外买的电器,由于每个国家的电压标准不同,所以电器的指定电压也不同,这时候如果我们想正常使用,就用使用电压适配器,当然生活中还有很多插头转化器。220V 标压类 AC220public class AC220 { public int output220V() { int output = 22原创 2020-08-08 16:07:22 · 91 阅读 · 0 评论 -
设计模式系列--模板模式
定义模板模式通常又叫模板方法模式,是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。实现方式现在要设计一个购物优选系统,在系统内你可以随意选择商品,在结算时再选择货源如淘宝、京东、当当、拼多多等购物平台。DoShopping 接口public interface DoShopping { void doShopping();}DoShoppingOnlineTemplate 模板类public abstr原创 2020-07-25 20:24:29 · 153 阅读 · 0 评论 -
设计模式系列--策略模式
定义策略模式是指定义了算法家族、分别封装起来,让他们之间可以互相替换。此模式让算法的变化不会影响到使用算法的用户。实现方式我们平常在使用App登陆账号时,可以使用App本身账号,也可以使用第三方账号如支付宝、微信、微博等进行一键登录。登陆接口 Loginpublic interface Login { String doLogin(String loginWay);}支付宝登陆public class AlipayLogin implements Login { @Override原创 2020-07-19 15:46:29 · 141 阅读 · 0 评论 -
设计模式系列--委派模式
定义委派模式就是负责任务的调用和分配,跟 设计模式系列–代理模式很像,可以看作是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果。实现方式一般在公司,老板有什么想法,首先是和他手下的管理人员沟通,管理人员将老板的想法落实后,将任务拆解派发给下面的员工。IEmployee 员工接口public interface IEmployee { void doThing(String command);}EmployeeA 公司后台开发工程师public class原创 2020-05-25 22:02:14 · 120 阅读 · 0 评论 -
设计模式系列--责任链模式
定义责任链模式是将链中每一个节点看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。即 将多个处理逻辑对象形成一条链,并沿着这条链传递请求,直到链上的某一个对象决定处理此请求。实现方式模拟用户登陆过程,首先系统需要验证输入参数是否合法,然后验证用户是否存在,最后进行权限验证。本案例结合了建造者模式思想进行演示,不熟悉建造者模式的读者可先前往 设计模式系列–建造者模式 熟悉Us原创 2020-05-24 13:37:53 · 310 阅读 · 0 评论 -
设计模式系列--建造者模式
定义建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不用的表示。建造者模式使用户更加注重对象创建的过程,不需要关注创建的内部细节。实现方式我们平常点奶茶,可以选择大杯、中杯、小杯,什么水果,什么奶,什么茶底等Tea对象public class Tea { private String teaSize; private String milkType; private String fruitType; private String teaType;原创 2020-05-24 10:32:07 · 186 阅读 · 0 评论 -
设计模式系列--代理模式
定义代理模式是指为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介作用。根据被代理对象的类型,代理模式分为静态代理和动态代理。静态代理只可以代理指定类型,动态代理不限制类型。静态代理定义接口 Personpublic interface Person { void findHouse();}被代理对象 Renterpublic class...原创 2020-05-05 22:30:48 · 157 阅读 · 0 评论 -
设计模式系列--原型模式
定义原型模式是指 通过原型实例指定创建对象的类型,克隆该实例属性相同的新对象。调用者不需要知道任何创建细节,不调用构造函数。因此原型模式也被称为克隆模式。适用场景:1、类初始化消耗资源较多2、new 产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)3、构造函数比较复杂原型模式创建方式分为两种:浅克隆 ,深克隆实现方式1、浅克隆克隆出的新对象的引用属性内存地址还是指向原实例...原创 2020-05-04 22:16:59 · 108 阅读 · 0 评论 -
设计模式系列--单例模式
定义确保一个类在任何情况下,如运行容器中,都只有一个实例,实现构造函数私有化,并提供一个全局访问点。实现方式1 、饿汉式public class HungrySingleton { private static final HungrySingleton INSTANCE = new HungrySingleton(); private HungrySingleton() { ...原创 2020-05-03 18:26:33 · 130 阅读 · 0 评论 -
设计模式系列--软件设计原则
设计原则,是我们在实际软件开发中尽可能遵循的一套规则,但不是必须遵守的规则。同时设计原则也是设计模式的基础。开闭原则对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节,即面向抽象编程。可以提高软件的复用性、可维护性、稳定性。定义一个Car接口public interface Car { int getPrice();}奔驰品牌车public class BenzCar imp...原创 2020-04-20 21:37:27 · 146 阅读 · 0 评论