
设计模式
设计模式
两只橙
全球AI挑战赛百强选手,曾任职于腾讯微信事业部,魅族flyme事业部,中国平安人工智能团队。《深度学习500问》作译者,优快云博客专家及签约讲师,指弹吉他爱好者,简书专栏作家。
展开
-
23种设计模式——单例模式(枚举类实现)
一、枚举实现单例模式优势单例模式约束一个类只能实例化一个对象。在Java中,为了强制只实例化一个对象,最好的方法是使用一个枚举量。这个优秀的思想直接源于Joshua Bloch的《Effective Java》这里有几个原因关于为什么在Java中宁愿使用一个枚举量来实现单例模式:1、 自由序列化;2、 保证只有一个实例(即使使用反射机制也无法多次实例化一个枚举量);3、 线程安全;4、...原创 2019-08-26 10:52:45 · 718 阅读 · 0 评论 -
23种设计模式——责任链模式
本文将结合个性化推荐系统中的广告推荐流程来讲解责任链模式,广告位经过定义的责任链预处理—>召回模块—>粗排序模块—>精排序模块—>规则模块—> 资讯模块—>后处理:上报信息得到个性化的推荐广告位,来讲解责任链模式在实际生产中的使用方式。一、配置信息jdk 版本:jdk8框架:springboot二、maven配置 <dependenc...原创 2019-08-24 13:54:37 · 1495 阅读 · 1 评论 -
23种设计模式——策略模式
一、列表工具类1、对两个列表去重并合并。import com.google.common.collect.Lists;import com.google.common.collect.Sets;import org.apache.commons.collections4.CollectionUtils;import java.util.ArrayList;import java.ut...原创 2019-08-18 14:06:06 · 2099 阅读 · 3 评论 -
23种设计模式——单例模式
一、目的单例的目的是为了保证运行时Singleton类只有唯一的一个实例,最常用的地方比如拿到数据库的连接,Spring的中创建BeanFactory这些开销比较大的操作,而这些操作都是调用他们的方法来执行某个特定的动作。二、单例会带来什么问题多线程调用这个实例,会产生线程安全问题三、解决方法(1)按使用环境决定,单线程环境下使用懒汉模式public class Singleton { pr原创 2017-12-22 15:24:07 · 273 阅读 · 0 评论 -
23种设计模式——装饰器模式
装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装一、意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活 主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀二、何时使用:在不想增加很多子类的情况下扩展类三、如何解决:将原创 2017-12-22 15:16:05 · 330 阅读 · 0 评论 -
23种设计模式——适配器模式
一、目的:适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。二、意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。三、主要解决:主要解决在软件系统中,常常要将一些”现存的对象”放到新的环境中,而新环境要求的接口是现对象不能满足的。四、何时使用:原创 2017-12-22 14:52:56 · 276 阅读 · 0 评论 -
23种设计模式——代理模式
(1)意图:为其他对象提供一种代理以控制对这个对象的访问(2)主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层(3)何时使用:想在访问一个类时做一些控制(4)如何解决:增加中原创 2017-12-22 14:19:43 · 304 阅读 · 0 评论 -
23种设计模式——工厂模式+适配器模式实战
业务需求,需要对不同的浏览器返回不同的url地址 例如: Chrom浏览器返回:’http://www.chrom.com‘, IE浏览器返回:’http://www.ie.com’1、根据这个业务需求,自然想到用工厂模式和适配器模式相结合方式解决(1)工厂类package com.xinrui.code.url.handler;public class UrlTranslateFactory {原创 2017-11-16 11:27:53 · 1861 阅读 · 1 评论