
设计模式
设计模式专题
Mutou_ren
这个作者很懒,什么都没留下…
展开
-
策略模式
定义定义了算法家族,分别封装起来,让他们之间可以互相替换,算法的变化不会影响到使用算法的用户,能够减少if...else的使用适用场景系统有很多类,区别仅在行为不同系统需要动态的采用不同算法优点符合开闭原则避免使用多重条件转移语句提高算法保密性和安全性缺点客户端必须知道所有的策略类,并自行决定使用哪一个策略类会产生很多策略类代码以商场促销为例,定义促销方式接口...原创 2019-05-29 20:16:54 · 137 阅读 · 0 评论 -
组合模式
介绍将对象组合成树形结构表示部分-整体的层次结构,对客户端而言单个对象和组合对象保持一致的处理方式适用场景希望客户端可以忽略组合对象与单个对象的差异时处理树形结构时优点清楚地定义分层次的复杂对象,表示对象的全部或部分层次让客户端忽略层次差异,方便对整个层次结构进行控制简化客户端代码符合开闭原则缺点限制类型时会比较复杂增加了抽象程度代码以课程和课程目录来举例,...原创 2019-05-29 20:06:14 · 98 阅读 · 0 评论 -
桥接模式
介绍抽象部分与具体实现部分分离,通过组合的方式建立联系,而不是继承适用场景抽象和实现之间需要更强的灵活性一个类存在两个独立变化的维度,且两个维度都需要独立扩展不希望使用继承桥接和组合桥接关注在平行级别类的组合组合关注在部分和整体之间的组合桥接和适配器适配器是改变接口桥接模式目的是分离抽象和实现代码public interface Account { Accou...原创 2019-05-26 21:00:10 · 141 阅读 · 0 评论 -
享元模式
定义运用共享技术减少对象数量适用场景池技术系统有大量相同对象应用案例JDK中的String,常量池中存在时直接返回,没有则创建放入池中数据库连接池代码public interface Boll { void logColor();}public class ColorBoll implements Boll { private static fin...原创 2019-05-25 16:37:04 · 115 阅读 · 0 评论 -
装饰者模式
在不改变原有对象的基础上增加新功能,可以动态的给对象增加功能优点继承的补充,比继承更灵活。多个装饰类的排列组合可以产生不同效果符合开闭原则缺点增加了更多的类和代码在动态装饰、多层装饰时更复杂装饰者和代理装饰者关注给对象动态增加方法,对象一般持有的是老对象,代理是控制对象的访问,对象一般是新建出来的。适配器模式都可以叫包装模式,适配器和被适配的类具有不同的接口...原创 2019-05-22 23:05:56 · 128 阅读 · 0 评论 -
适配器模式
介绍将一个类的接口转换为另一个接口,从而使原本不兼容的接口可以一起工作适用场景已经存在的类,方法和需求不匹配,但结果相同或相似该模式不是设计阶段的模式,是一种亡羊补牢时的模式,是维护时的一种解决方案优点提高类的复用性提高程序扩展性,目标类和适配类解耦缺点过多适配器导致系统很凌乱,代码可阅读性下降编写过程需要全面考虑,增加复杂性扩展对象适配器,通过委托机制类适配器,通过继承...原创 2019-05-22 22:28:06 · 136 阅读 · 0 评论 -
外观模式
定义提供一个高层次接口,用来访问子系统中的一群接口适用场景子系统越来越复杂,引入外观模式提供简单接口调用多层系统结构,适用外观对象作为每层入口,简化层次间调用优点简化调用,无需深入子系统内部降低系统耦合层次划分:对外和对内接口区分开符合迪米特法则:最少知道法则缺点不符合开闭原则,当增加子系统时,外观类需要进行修改外观模式和其他模式外观模式和中介模式前者重在外界...原创 2019-05-18 16:45:23 · 133 阅读 · 0 评论 -
原型模式
定义将一个对象作为原型,以克隆拷贝的形式创建新的对象,其基础是克隆,即必须实现Cloneable接口。通过克隆产生对象,不会调用构造器,而是先分配内存,然后将被克隆对象的数据拷贝过来,然后将新对象的地址返回,不会调用构造器进行初始化操作。克隆方法的底层是native方法,速度很快。适用场景类初始化消耗资源过多,构造函数复杂new产生一个对象时过程繁琐循环体需要产生大量对象深克隆与...原创 2019-05-18 16:21:53 · 133 阅读 · 0 评论 -
单例模式
懒汉public class Lazy { private Lazy() { } private static Lazy lazy; public static Lazy getInstance(){ if (lazy == null) { lazy = new Lazy(); } retu...原创 2019-05-15 20:44:57 · 119 阅读 · 0 评论 -
建造者模式
如果一个对象的创建拥有很复杂的流程,或对象内存在很多组件、属性等,使用建造者模式将这种对象的创建和使用分离。该模式可以使用固定的组件但不同的顺序去建造不同的对象,如炒一个菜韭菜鸡蛋,韭菜(组件1)和鸡蛋(组件2)是一定要放的,但放的顺序可以不同;同样组件1也可以是番茄,组件2也可以是其他东西,由具体的build类去指定,而组件的安装顺序则由执行者去指定,客户端只需要从执行者处拿到对象即可。优点...原创 2019-05-14 19:15:27 · 239 阅读 · 0 评论 -
工厂模式
简单工厂模式介绍:将创建对象的动作封装成一个方法(可以为静态),根据入参值的不同,返回不同类型的对象。好处:. 隐藏对象创建细节. 客户端不需要再依赖具体的对象类(代码里表现为需要import各种类),依赖关系全部转嫁到工厂类中,客户端只需要依赖一个工厂类即可。缺点:扩展性差,当需要增加类型时同样需要修改工厂类的代码。扩展:利用反射的方法拿到入参的类,并通过类的instance...原创 2019-05-14 19:11:41 · 172 阅读 · 0 评论 -
策略模式、状态模式、命令模式
策略模式是有统一的接口,多个不同的实现类(如算法实现),调用者用多态的形式使用接口,具体实现根据需求去注入不同的算法实现类。状态模式是根据状态的不同自主转换不同的行为,内部有固定的行为链条,要按照这个链条一步一步的来,外界无法也无意干扰状态链。命令模式是根据用户请求的命令调用不同的命令,而命令中会有专门的执行者去执行。 参考:https://blog.youkuaiyun.com/ruan...原创 2018-09-24 13:39:48 · 580 阅读 · 0 评论 -
适配器模式、装饰器模式、代理模式区别
适配器模式:接口不同而导致无法一起工作,新类会实现新的接口,并持有旧类和旧接口。新类的工作有两个——1.兼容老接口(直接调用旧方法)2.实现新街口(配置实现新的内容) 代理模式:代理类和被代理类实现的是同一个接口,且代理类持有被代理类的对象代理类中会增加一些额外操作,但在执行被代理类的方法时是由持有的被代理类的对象来调用实现的代理模式的意图是隐藏原类 装饰模式:...原创 2018-09-06 21:08:20 · 1001 阅读 · 0 评论