设计模式
A记录学习路线
这个作者很懒,什么都没留下…
展开
-
设计模式1单例模式
设计模式GOF23group of four• 创建型模式: 5– 单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。• 结构型模式: 7– 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模 式。• 行为型模式: 11– 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。单例模式...转载 2018-12-10 18:44:39 · 230 阅读 · 0 评论 -
设计模式3建造者模式
建造者模式之前学的工厂模式是用来构建某一个产品或者产品族,要是涉及到组装的话。。。场景:– 我们要建造一个复杂的产品。比如:神州飞船,Iphone。这个复杂的产品的创建。有这样 一个问题需要处理:装配这些子组件是不是有个步骤问题?– 实际开发中,我们所需要的对象构建时,也非常复杂,有很多步骤需要处理时。建造模式的本质:– 分离了对象子组件的单独构造(由Builder来负责)和装配(...原创 2019-06-11 18:15:50 · 207 阅读 · 0 评论 -
设计模式4原型模式
原型模式prototype场景:– 思考一下:克隆技术是怎么样的过程? 克隆羊多利大家还记得吗?– javascript语言中的,继承怎么实现?那里面也有prototype,大家还记得吗?原型模式:– 通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。– 就是java中的克隆技术,以某个对象为原型,复制出新的对象。显然,新的对象具备原型对象的特点– 优势有:...原创 2019-06-11 21:22:27 · 180 阅读 · 0 评论 -
设计模式6代理模式
结构型模式• 结构型模式:– 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结 构,用来解决更大的问题。– 分类:• 代理模式、适配器模式、桥接模式、 装饰模式、组合模式、外观模式、享元模式代理模式• 代理模式(Proxy pattern):– 核心作用:通过代理,控制对对象的访问! 可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后 ...原创 2019-06-11 21:43:21 · 158 阅读 · 0 评论 -
设计模式5适配器模式
结构型模式:核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。分类:适配器模式、代理模式、桥接模式、装饰模式、组合模式、外观模式、享元模式适配器adapter模式生活中的场景转接头==适配器什么是适配器模式?将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。模式中的角色...原创 2019-06-11 22:08:33 · 228 阅读 · 0 评论 -
设计模式7桥接模式
桥接模式(bridge)场景商城系统中常见的商品分类,以电脑为类,如何良好的处理商品分类销售的问题?我们可以用多层继承结构实现右图的关系。电脑可以做一个接口增加子类联想神州戴尔问题:扩展性问题(类个数膨胀问题):如果要增加一个新的电脑类型:智能手机,则要增加各个品牌下面的类。如果要增加一个新的品牌,也要增加各种电脑类型的类。违反单一职责原则:每个类都承担了...原创 2019-06-12 09:38:25 · 193 阅读 · 0 评论 -
设计模式8组合模式
组合模式(composite)使用组合模式的场景:把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象。组合模式核心:抽象构件(Component)角色: 定义了叶子和容器构件的共同点叶子(Leaf)构件角色:无子节点容器(Composite)构件角色: 有容器特征,可以包含子节点抽象组件叶子节点容器组件有一个聚合的关系组合模式工作...原创 2019-06-12 09:58:29 · 303 阅读 · 0 评论 -
设计模式9装饰模式
装饰模式(decorator)职责:动态的为一个对象增加新的功能。装饰模式是一种用于代替继承的技术,无须通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。实现细节:Component 抽象构件角色:真实对象和装饰对象有相同的接口。这样,客户端对象就能够以与真实对象相同的方式同装饰对象交互。ConcreteComponent 具...原创 2019-06-12 10:24:29 · 145 阅读 · 0 评论 -
设计模式10外观模式
外观模式 facade迪米特法则(最少知识原则):一个软件实体应当尽可能少的与其他实体发生相互作用。蒙面模式外观模式核心:为子系统提供统一的入口。封装子系统的复杂性,便于客户端调用。基本案例注册公司流程(不使用外观模式)整个流程对于客户非常繁琐注册公司流程(使用外观模式)开发中常见的场景频率很高。哪里都会遇到。各种技术和框架中,都有外观模式的使用。如...原创 2019-06-12 10:37:36 · 166 阅读 · 0 评论 -
设计模式11享元模式
享元模式(FlyWeight)场景:内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的对象,我们可以通过享元模式,节省内存。核心:享元模式以共享的方式高效地支持大量细粒度对象的重用。享元对象能做到共享的关键是区分了内部状态和外部状态。内部状态:可以共享,不会随环境变化而改变外部状态:不可以共享,会随环境变化而改变 可以作为参数传进来案例享元模式实现:Flywe...原创 2019-06-12 10:58:28 · 127 阅读 · 0 评论 -
jdk动态代理的实现原理
还需知其所以然。所以要想搞清楚它的实现,那么得从源码入手。这里的源码是1.7.0_79。首先来看看它是如何生成代理类的:public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, ...转载 2019-07-13 19:14:43 · 233 阅读 · 0 评论 -
设计模式22备忘录模式
备忘录模式 memento场景:录入大批人员资料。正在录入当前人资料时,发现上一个人录错了,此时需要恢复上一个人的资料,再进行修改。Word文档编辑时,忽然电脑死机或断电,再打开时,可以看到word提示你恢复到以前的文档管理系统中,公文撤回功能。公文发送出去后,想撤回来。核心就是保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状态。结构:源发器类 Originator...原创 2019-06-14 11:51:03 · 150 阅读 · 0 评论 -
设计模式21观察者模式
观察者模式 Observer广播机制的场景:场景:聊天室程序的创建。服务器创建好后,A,B,C三个客户端连上来公开聊天。A向服务器发送数据,服务器端聊天数据改变。我们希望将这些聊天数据分别发给其他在线的客户。也就是说,每个客户端需要更新服务器端得数据。网站上,很多人订阅了”java主题”的新闻。当有这个主题新闻时,就会将这些新闻发给所有订阅的人。大家一起玩CS游戏时,服务器需要将每个人...原创 2019-06-14 11:49:57 · 147 阅读 · 0 评论 -
设计模式2工厂模式
工厂模式– 实现了创建者和调用者的分离。– 详细分类:• 简单工厂模式• 工厂方法模式• 抽象工厂模式面向对象设计的基本原则:依赖的手段是:分工OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。LoD(迪...转载 2018-12-10 18:55:23 · 198 阅读 · 0 评论 -
设计模式12责任链模式
行为型模式行为型模式关注系统中对象之间的相互交互,研究系统在运行时对象之间的相互通信和协作,进一步明确对象的职责,共有11种模式。创建型模式关注对象的创建过程。结构型模式关注对象和类的组织。行为型模式汇总:责任链模式 chain of responsibility命令模式 command解释器模式 interpreter迭代器模式 iterator中介者模式 mediator...原创 2019-06-12 15:32:16 · 258 阅读 · 0 评论 -
设计模式13迭代器模式
迭代器模式 iterator场景:提供一种可以遍历聚合对象的方式。又称为:游标cursor模式聚合对象:存储数据迭代器:遍历数据结构:聚合对象:存储数据迭代器:遍历数据定义接口,迭代器定义聚合类在这里面定义容器获得迭代器,通过呢定义内部类获得迭代器的方法测试创建聚合对象修改下代码,没必要在构造方法中传入list了它里面天然包含了list起到了遍...原创 2019-06-12 15:46:48 · 145 阅读 · 0 评论 -
设计模式14中介者模式
中介者模式 Mediator场景(中介大家熟悉吗?房产中介?)假如没有总经理。下面三个部门:财务部、市场部、研发部。财务部要发工资,让大家核对公司需要跟市场部和研发部都通气;市场部要接个新项目,需要研发部处理技术、需要财务部出资金。市场部跟各个部门打交道。 虽然只有三个部门,但是关系非常乱。实际上,公司都有总经理。各个部门有什么事情都通报到总经理这里,总经理再通知各个相关部门。这就是一...原创 2019-06-12 16:08:28 · 219 阅读 · 0 评论 -
设计模式15命令模式
命令模式 command介绍:命令模式:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式、事务transaction模式结构:Command 抽象命令类ConcreteCommand 具体命令类Invoker 调用者/请求者请求的发送者,它通过命令对象来执行请求。一个调用者并不需要在设...原创 2019-06-12 16:22:04 · 180 阅读 · 0 评论 -
设计模式16解释器模式
解释器模式 Interpreter介绍:是一种不常用的设计模式用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的编译器和解释器设计。当我们需要开发一种新的语言时,可以考虑使用解释器模式。尽量不要使用解释器模式,后期维护会有很大麻烦。在项目中,可以使用Jruby,Groovy、java的js引擎来替代解释器的作用,弥补java语言的不足。开发中常见的场景:EL表达式式...原创 2019-06-12 16:25:46 · 186 阅读 · 0 评论 -
设计模式17访问者模式
访问者模式 Visitor模式动机:对于存储在一个集合中的对象,他们可能具有不同的类型(即使有一个公共的接口),对于该集合中的对象,可以接受一类称为访问者的对象来访问,不同的访问者其访问方式也有所不同。定义:表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变个元素的类的前提下定义作用于这些元素的新操作。开发中的场景(应用范围非常窄,了解即可):XML文档解析器设计编译器的...原创 2019-06-14 08:52:23 · 139 阅读 · 0 评论 -
设计模式18策略模式
策略模式 strategy场景:某个市场人员接到单后的报价策略(CRM系统中常见问题)。报价策略很复杂,可以简单作如下分类:普通客户小批量报价普通客户大批量报价老客户小批量报价老客户大批量报价具体选用哪个报价策略,这需要根据实际情况来确定。这时候,我们采用策略模式即可。我们先可以采用条件语句处理:实现起来比较容易,符合一般开发人员的思路假如,类型特别多,算法比较复杂时,整个条...原创 2019-06-14 11:46:17 · 216 阅读 · 0 评论 -
设计模式19模板方法模式
模板方法模式 template method场景:客户到银行办理业务:取号排队办理具体现金/转账/企业/个人/理财业务给银行工作人员评分模板方法模式介绍:模板方法模式是编程中经常用得到模式。它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。核心:处理某个流程的代码已经都具备,但是其中某个节点的...原创 2019-06-14 11:47:28 · 148 阅读 · 0 评论 -
设计模式20状态模式
状态模式 state场景:电梯的运行维修、正常、自动关门、自动开门、向上运行、向下运行、消防状态红绿灯红灯、黄灯、绿灯企业或政府系统公文的审批状态报销单据审批状态假条审批网上购物时,订单的状态下单已付款已发货送货中已收货电梯程序案例场景:酒店系统中,房间的状态变化:已预订已入住空闲酒店系统中,房间状态变化的相关类图结构:核心:用于解决系统中复...原创 2019-06-14 11:48:43 · 225 阅读 · 0 评论 -
设计模式总结
设计模式创建型模式:帮助我们创建对象的。*单例模式:只涉及到一个类的对象创建。保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。java.lang.RuntimeRuntime类封装了Java运行时的环境。每一个java程序实际上都是启动了一个JVM进程,那么每个JVM进程都是对应这一个Runtime实例,此实例是由JVM为其实例化的。每个 Java 应用程序都有一个 Runti...转载 2019-07-15 18:10:40 · 198 阅读 · 0 评论