设计模式
qq_30409323
这个作者很懒,什么都没留下…
展开
-
设计模式或者说面向对象的6大基本原则
设计模式基本原则先说为啥写这篇。没法子。这种理论东西居然成为了面试的考题,只能说明中国有些东西跑偏了。但是没法子。社会风气如此,面对这种问题,你只能跟皇帝的新衣里头那群大人一样,不能说不好看。回到正题,我先说说这6个基本原则是啥1、单一职责原则(Single Responsibility Principle)定义 : 应该有且只有一个原因引起类的变化这种原则从字面意思看上去好像无比正确,...转载 2019-03-26 14:08:05 · 106 阅读 · 0 评论 -
模板方法模式template method
模板方法模式还是比较好理解的。大概是假如你做一件事 要分成 好几个步骤。也就是要定义好几个方法。然后这几个方法的顺序基本是固定的。只是少数方法在细节上有不同。这个时候模板方法就出来。 顾名思义。就是执行顺序固定抽象出来。也就是模板。然后具体细节通过再定义继承类再扩展。下面看例子对照定义 执行模板里头的方法是固定的。然后有差异部分定义成抽象方法。然后具体实现就是补充这个抽象方法总结如下1、...原创 2019-04-23 14:28:03 · 108 阅读 · 0 评论 -
责任链模式
责任链模式 简单就是说 如果要根据某个条件处理多个不同的事情。如果正常让你来写代码。if else 或者各种case 语句就能搞定了。但是责任链模式觉得这样不好。耦合大。为了解耦。把各种真正else里头实际的处理者或者叫对象抽象出来。形成一个所谓的接口或者抽象类。这个抽象类有一个对象。这个处理对象的恰好是这个类同类型。这个接口还有一个抽象处理方法。这个方法也很诡异。一个简单的if else 。el...原创 2019-04-26 10:08:27 · 142 阅读 · 0 评论 -
桥接模式 组合模式 门面模式
在写这个文章前,看到三个新概念,准确的说我是懵比的,妈呀写了这多年代码还有这么多模式都不会啊。不过看完之后我就想大骂一句,为了凑数量原作者真是脸都不要了。这三种模式基本你不懂都会不自觉的用上,就不要拿出来说了。先说桥接模式就是典型 has -a 模式。 对象有个属性。属性可扩展。谁还没用过可扩展的属性,spring里头全是注入了这个对象那个对象。再看看组合模式就是典型的 B has A ...原创 2019-04-03 10:49:25 · 181 阅读 · 0 评论 -
单例模式
1.恶汉1号很少这么写。2.懒汉2号还是很少这么写3.懒汉1号多线程有事。单线程没事4.懒汉2号虽然加了sync标识,但是还是无法保证多线程没事5.懒汉3号双重检测同步代码中再加一个 if else 。同时加上volatile 防止 singleton=new singleton();这一句指令重排序。安全singleton=new singleton(); ...原创 2019-03-29 13:44:45 · 105 阅读 · 0 评论 -
享元模式
我理解的所谓的享元的模式就是 缓存如果这个对象不在缓存里头就创建。有的话就用缓存的。跟单例模式有点像,但是注意看实现手法,跟类的结构。这个共享对象是通过放到一个map中,如果key不同,或者计算key的方式不同是可以产生多个对象的。单例可是从头到尾只有一个对象产出。这里插入一点题外话 就是 jdk1.8里头的 ConcurrentHashMap的两个方法computeIfAbsent 跟...原创 2019-03-29 13:38:49 · 96 阅读 · 0 评论 -
原型模式 clone 浅拷贝 深拷贝
原型模式 就是实现对象的拷贝。 也就是实现Cloneable接口。先说Cloneable接口。空接口。是不是很意外。没有要实现的方法。那怎么实现拷贝呢。原来在Object类里头已经有方法了。只不过默认是不让用。一用就抛出异常。除非你实现了Cloneable,最后实现就是下面。是不是很简单但是重载方法的时候,发现居然只是调用了super.clone() 但是父类方法是空的啊。注意看父类方...原创 2019-03-29 10:14:33 · 167 阅读 · 0 评论 -
代理模式 jdk代理 cglib代理 spring aop代理
这里代理原理就不讲了因为基本估计你自己写代码是用不到的,除非你自己要整个框架来替代spring 。主要讲讲有哪些代理模式,以及spring的Aop动态代理规则。先讲结果,Aop的最大意义是:在不改变原来代码的前提下,也不对源代码做任何协议接口要求。而实现了类似插件的方式,来修改源代码,给源代码插入新的执行代码。有了这个,你可以实现自定义注解。实现通用方法打印日志。哪究竟啥是jdk代理呢,很简单...原创 2019-04-02 16:13:32 · 129 阅读 · 0 评论 -
装饰器模式decorator
这个模式还是属于结构模式。啥时候用呢。一般写代码都是定义一个接口,然后给一个默认实现就实现功能了。但是随着功能修改,要在原有impl上要新增一些调整。这个时候你会怎么做呢。直接改原impl的代码么。也许会。但是装饰器模式会新增一个装饰类。先看整个uml图。然后解释哪个才是装饰类首先Display是接口。StringDisplay是最早的实现。SideBorder才是装饰类。装饰模式一定是有了...原创 2019-04-02 11:22:43 · 174 阅读 · 0 评论 -
啥才是真正的适配器模式adapter之我见
网上有一篇搜索排在考前的讲适配器模式的帖子。把什么适配器分成三类,什么类适配,对象适配器,接口适配器。前2种情况的例子我觉得不够好。总感觉现实写代码不会那么去转换。靠谱的adapter模式应该是下面的模式就是当一个类就想实现一个接口或者多个接口中自己的需要的方法的时候。请使用adapter。先上类图比如你现在已经有了很多基层的细化的接口。现在想要只实现其中的某几个方法,在没有adapter的...原创 2019-04-02 09:49:51 · 146 阅读 · 0 评论 -
建造者模式 builder模式
先来一种貌似很多人文章里头弄的比较复杂的这里首先有最终产品Man 然后有构造过程接口ManBuilder跟具体实现ManBuilderImp 。还有一个官方定义指挥官ManDirector,实际建造过程都是通过ManDirector调用构造方法完成Man的构造。这个模式扩展性好 ,新增一种Man。就多加一个ManBuilder实现,最后用的时候通过给Director传不同的builder实...原创 2019-03-28 11:25:43 · 91 阅读 · 0 评论 -
简单工厂 工厂方法 抽象工厂
1.简单工厂 三种分类的uml模型图一个接口 不同的实现 ,对象生成时机都是在工厂类中。。 根据调用生成方法的不同模式。分成了普通,方法跟静态方法可以看出。要增加一个接口实现的时候。需要新增一个实现类。同时改工厂类。最差的是普通简单工厂。要update原来的getMouse方法。 对于方法跟静态方法来说,需要在工厂类add一个方法getXXXMouse,但是都是要对原有代码有入侵。2....原创 2019-03-27 13:43:04 · 113 阅读 · 0 评论 -
观察者模式 事件驱动模型 傻傻分不清楚
说实话。没有写这篇文字之前。我以为这两者是同一个东西。因为从我的经验来讲。就是观察者,观察者,就是你要关注某个东西。关注某个东西的什么呢。肯定就是状态变化了。观察者模式就是就是某个类A状态变化了要及时通知到关注这个东西的一群类B。按照这个模式。就是类A里头要有一个list 存放类B。 然后A里头要有增加删除list的方法。还要有通知类B的方法。当然怎么通知呢。当然是调用B的一个方法。这样。就起到...原创 2019-04-25 10:14:54 · 1187 阅读 · 0 评论