常用设计模式
问而知
向Java提问,探寻代码内含的意蕴
展开
-
06-装饰者模式(Decorator)
概述:为对象动态添加功能。装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。装饰者的方法有一部分是自己的,这属于它的功能,然后调用被装饰者的方法实现,从而也...原创 2019-06-06 20:06:37 · 214 阅读 · 0 评论 -
07-代理模式(Proxy)
概述:控制对其它对象的访问。使用场景:保护目标对象增强目标对象优点:代理模式能将代理对象与真实被调用的目标对象分离一定程度上降低了系统的耦合度,扩展性好保护目标对象 增强目标对象缺点:代理模式会造成系统设计中类的数目增加在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢增加系统的复杂度拓展:静态代理:通过在代码中显式定义一个业务实...原创 2019-06-06 20:07:52 · 174 阅读 · 0 评论 -
08-策略模式(Strategy)
定义:定义了算法家族,分别封装起来,让它们之间可以互相替换, 此模式让算法的变化不会影响到使用算法的用户。可以通过策略模式清除大量的if..else。适用场景系统有很多类,而他们的区别仅仅在于他们的行为不同一个系统需要动态地在几种算法中选择一种优点:满足开闭原则避免使用多重条件转移语句提高算法的保密性和安全性:只需要知道策略类是干什么的,而不需要知...原创 2019-06-06 20:08:30 · 131 阅读 · 0 评论 -
09-观察者模式(Observer)
附:或叫监听器模式(Listener)定义:定义了对象之间的一对多依赖,让多个观察者对象同时监听某个主题对象,当主题对象发生变化时,它的所有依赖者(观察者)都会 收到通知并更新适用场景:关联行为场景,建立一套触发机制优点观察者和被观察者之间建立一个抽象的耦合观察者模式支持广播通信缺点观察者之间有过多的细节依赖、提高时间消耗及程序复杂度...原创 2019-06-06 20:08:58 · 145 阅读 · 0 评论 -
10-命令模式(Command)
定义:将"请求"封装成对象,以便使用不同的请求命令模式解决了应用程序中对象的职责以及它们之间的通信方式(即命令者和执行者完全解耦)适用场景请求调用者和请求接收者需要解耦,使得调用者和接收者不直接交互需要抽象出等待执行的行为优点降低耦合容易扩展新命令或者一组命令缺点:命令的无限扩展会增加类的数量,提高系统实现复杂度示例DEMO&am...原创 2019-06-06 20:09:23 · 173 阅读 · 0 评论 -
附:单例模式的破坏
序列化对象对单例模式的破坏与恢复首先这是一个饿汉式的单例对象构建方式,一般情况下获取到的都是同一个单例对象但是当序列化写入本地再读入内存时,会重新创建一个单例对象为什么会在读入序列化后的对象时会让单例模式失效呢?这儿从readObject()方法入手进入这个方法后:private Object readObject0(boolean unshared)进入p...原创 2019-06-07 18:20:34 · 127 阅读 · 0 评论 -
附-七大软件设计原则
该文章部分图片来自:慕课网《java设计模式精讲 Debug 方式+内存分析》七大原则:开闭原则、依赖倒置原则、单一职责原则接口隔离原则、迪米特法则、里式替换原则、组合复用原则注:1.高层底层不是UML图中类的高低,而是指在类似于MVC架构中的Service(高),DAO(低)这种2.通过抽象构建出来的架构一般要比通过细节构建出...原创 2019-06-07 18:22:38 · 205 阅读 · 0 评论 -
附:问而知
结合JDK谈谈了解的设计模式单例模式:JDK的lang包中Runtime类的getRuntime()对Runtime实例的获取就是饿汉式单例的体现抽象工厂:JDK的sql包中的Connection接口就将一个产品族的构建方法进行了统一定义工厂方法:JDK的util包中的Collection接口中的iterator()方法就是一个工厂方法,使用这个方法来返回一个由子类实现的Iterato...原创 2019-06-07 18:24:10 · 195 阅读 · 0 评论 -
05-适配器模式(Adapter)
概述:把一个类接口转换成另一个用户需要的接口,使原本接口不兼容的类可以一起工作适用场景:已经存在的类,它的方法和需求不匹配时(方法结果相同或相似)不是软件设计阶段考虑的设计模式,是随着软件维护,由于 不同产品、不同厂家造成功能类似而接口不相同情况下的解决方案优点:能提高类的透明性和复用,现有的类复用但不需要改变目标类和适配器类解耦,提高程序扩展性符合开闭原则缺...原创 2019-06-06 20:05:52 · 134 阅读 · 0 评论 -
04-原型模式(Prototype)
概述:使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象不需要知道任何创建的细节,不调用构造函数适用场景:类初始化消耗较多资源new产生的一个对象需要非常繁琐的过程(数据准备、访问权 限等 构造函数比较复杂循环体中生产大量对象时优点:原型模式性能比直接new-个对象性能高简化创建过程缺点:必须配备克隆方法对克隆复杂对象或对克隆出的对象进行...原创 2019-06-06 20:05:17 · 151 阅读 · 0 评论 -
03-建造者模式(Builder)
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程 可以创建不同的表示用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道适用场景:如果一个对象有非常复杂的内部结构(很多属性) 想把复杂对象的创建和使用分离优点:封装性好,创建和使用分离 扩展性好、建造类之间独立、一定程度上解耦缺点:产生多余的 Builder对象产品内部发生变化,建造者都...原创 2019-06-06 20:04:29 · 139 阅读 · 0 评论 -
01-单例模式(Singleton)
概述:使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。优点:在内存里只有一个实例,减少了内存开销可以避免对资源的多重占用设置全局访问点,严格控制访问缺点:没有接口,拓展比较困难饿汉式可以防止反射攻击,其他的则不能,因为饿汉式可以在类的链...原创 2019-06-06 19:58:33 · 186 阅读 · 0 评论 -
02-简单工厂&工厂方法&抽象工厂
1、简单工厂(Simple Factory)概述:在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。错误的方式:正确的方式:简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例...原创 2019-06-06 20:00:07 · 119 阅读 · 0 评论 -
八:理解GC日志
默认垃圾收集器-XX:+UseParallelGC【-XX:+PrintCommandLineFlags -version查看】G1垃圾收集器GC日志开头的“[GC”和“[Full GC”说明了这次垃圾收集的停顿类型,而不是用来区分新生代GC还是老年代GC的。如果有“Full”,说明这次GC是发生了Stop-The-World的。后面的“4639K->4622K...原创 2019-06-07 18:25:13 · 464 阅读 · 0 评论