设计模式
hywang94
这个作者很懒,什么都没留下…
展开
-
状态模式
定义:状态模式也称为状态机模式,是允许对象在内部状态发生改变时改变它的行为,对象看起来好像是修改了它的类。应用场景:1. 行为随状态改变而改变的场景2. 一个操作中含有庞大的多分支结构,并且这些分支取决于对象的状态在实际开发中如电商类项目的订单,审核流程等可以使用状态模式,下面使用电梯来举例状态模式的应用:/*** create by Alan at 2020/3/26 9:3...原创 2020-03-27 10:00:44 · 141 阅读 · 0 评论 -
策略模式
定义:策略模式也称政策模式,它是将定义的算法家族分别封装起来,让它们之间可以相互替换,从而让算法的变化不会影响到使用算法的用户。可以避免多重分支if-else和switch语句。适用场景:1. 假如系统中有很多类,而他们的区别仅仅在于他们的行为不同。2. 一个系统需要动态地在几种算法中选择一种。3. 需要屏蔽算法规则。上周刚好遇到这种大量if-else的业务场景,业务场景如下:我们项...原创 2020-03-15 10:13:10 · 111 阅读 · 0 评论 -
组合模式
定义:组合模式也称整体-部分模式,它的宗旨是通过将单个对象(叶子节点)和组合对象(树枝节点)用相同接口进行表示。作用:使客户端对当个对象和组合对象保持一致的方式处理。适用场景:1. 希望客户端可以忽略组合对象与单个对象的差异时。2. 对象层次具备整体和部分,如(树形结构,树形菜单,操作系统目录等)。实例代码:/*** 所有文件的根节点*/public abstract ...原创 2020-03-08 10:49:20 · 97 阅读 · 0 评论 -
享元模式
定义:享元模式又称轻量级模式,是对象池的一种实现。我个人的理解就是共享元数据,将常用的对象装到容器里,以便使用的人可以直接使用,而节省了创建、销毁所消耗的资源。应用场景:连接池、线程池等。代码:public class ConnectionPool { private Vector<Connection> pool; private int poolSi...原创 2020-03-08 10:38:06 · 84 阅读 · 0 评论 -
装饰器模式
定义:装饰器模式也叫包装模式,是指在不改变原有对象的基础上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有功能)。适用场景:1.用于扩展一个类的功能或给一个类添加附加职责。2.动态的给一个对象添加功能,这些功能有再动态地撤销。装饰器模式和代理模式对比:‘1.装饰器模式就是一种特殊的代理模式。2.装饰器模式强调自身的功能扩展。3.代理模式强调代理过程的控制。...原创 2020-03-07 11:54:49 · 129 阅读 · 0 评论 -
代理模式
概念:通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用之前或调用后进行处理。既(AOP微实现),AOP的核心技术面向切面编程。应用场景:SpringAOP、事务原理、日志打印、权限控制、远程调用、安全代理。(可以隐藏真实角色)一、静态代理(静态定义代理类),代码如下(为了方便,这里把多个class放到一起展示,直接复制到编辑器里是会报编译错误的,因为一个java文件只能有一...原创 2020-02-06 10:32:08 · 418 阅读 · 0 评论 -
模板方法模式
概念:实现一些操作时,整体步骤很固定,但是其中一小部分是变化的,这时候就可以使用模板方法模式,将容易变化的部分抽离出来,供子类实现。应用场景:servlet代码://短信模板public abstract class MsgTemplate { public void sendMsg(){ //1.开始日志报文 addHeadLog(); ...原创 2020-02-03 17:06:22 · 125 阅读 · 0 评论 -
适配器模式
概念:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。应用场景:主要用在不兼容的情况下,SpringMVC使用适配器进行拦截请求和分发优点: 1.更好的复用性,系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。 2.更好的扩展性,在实现适配...原创 2020-02-03 16:00:26 · 232 阅读 · 0 评论 -
外观模式
概念:外观模式,也叫门面模式,隐藏系统的复杂性,就是把多个方法封装到一个方法中。应用场景:多个操作一般都是一起出现的情况,就可以将这几个操作(方法)捆绑在一起,封装成一个类,方便调用。代码如下:package facade;public interface SmsMsgService { public void sendMsg();}public interface ...原创 2020-01-31 16:59:28 · 90 阅读 · 0 评论 -
原型模式
概念:该模式有一个样板实例,这个被克隆的实例就是我们说的“原型”。说白了就是有一个对象A,我们要操作的时候拷贝A得到一个A的副本B,这个A就称之为原型。我们操作的时候是对B做操作,这样就不会影响到原型A。应用场景:类初始化的时候需要消耗的资源比较多,这些资源包括数据、硬件等资源,通过原型拷贝可以避免这些消耗。 通过new产生一个对象需要非常繁琐的数据准备或者权限,这时可以使用原型模式。...原创 2020-01-31 10:29:23 · 102 阅读 · 0 评论 -
建造者模式
概念:给出一个接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复制对象的哪些部分的创建,并不涉及具体的对象部件的创建。应用场景:需要生成的对象具有复杂的内部结构 需要生成的对象内部属性本身相互依赖与工厂模式的区别:建造者模式更加关注于零部件装配的顺序。实例:public class Person { private String head; priv...原创 2020-01-30 15:45:21 · 111 阅读 · 0 评论 -
工厂方法模式
先介绍一下简单工厂模式,简单工厂不属于23种设计模式,其划分粒度比较大,类型多的情况下,扩展性差public interface Car { void run();}//比亚迪汽车public class BydCar implements Car{ @Override public void run() { System.out.println...原创 2020-01-26 17:03:14 · 225 阅读 · 2 评论 -
单例模式
定义:在一个jvm中只能存在一个实例,保证对象唯一性。应用场景:servlet、struts2、springMVC、连接池、线程池、枚举、常量。优点:节约内存、方便管理、重复利用。缺点:线程不安全创建方式:饿汉模式:类初始化的时候会立即创建该对象(存放在方法区中,不会被垃圾回收机制回收),线程天生安全(因为final修饰的全局变量),调用效率高,但是占内存: public c...原创 2020-01-24 10:33:19 · 146 阅读 · 0 评论 -
设计模式概述
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。但是在我们开发过程中,不应该为了使用设计模式而使用,我们应该以如何最简单最便捷的方式去实现为核心,使用设计模式本质上也是为了使代码更容易使用和维护,如果硬套设计模式,而导致代码实现更加复杂,那么就是本末倒置了,...原创 2020-01-24 09:47:33 · 299 阅读 · 1 评论