java设计模式系列1-- 概述
准备开始写些设计模式的随笔,这是第一篇,概述主要回顾下六大原则
先用轻松和谐的语言描述下这6个原则:
单一职责
每个类甚至每个方法都只要做自己分内的事,不要背别人的锅,也就是功能要分类,代码要解耦
里氏替换
简单点就是子类能够出现的地方,父类一定能出现,设计模式的继承和实现在这里体现的非常多
依赖倒置
高层模块不依赖低层模块的细节,而是依赖抽象(不依赖具体类而依赖于接口),这就是所谓的要面向接口编程
接口隔离
定义接口方法应该合理化,尽量追求简单最小,避免接口臃肿
迪米特法则 | 最少知道
你给我接口,我调用你,其他的不要废话。我们最好保持君子之交,你不要问我的过去,我也不想告诉你我怎么生活的
稍微解释下:一个类应该对自己需要耦合或调用的类知道得最少,类的内部如何实现、如何复杂都与调用者或者依赖者没关系,
调用者或者依赖者只需要知道他需要的方法即可,其他的一概不关心,例如常见的组合、聚合关系
- 一个词:解耦或降耦
开闭原则
类、模块和函数应该对扩展开放,对修改关闭
然后我们再给出设计时的2个关键词,以下是我总结的:
抽象类或接口:没有接口,没有父类不要谈设计模式
复用类:用的最多的组合、继承、代理方式
下一篇给出23种设计模式分类,坊间流传各种更多超过23种的,我们不关心,其实都是一些分得更细的
java设计模式系列1-- 概述的更多相关文章
- Java 设计模式系列(二三)访问者模式(Vistor)
Java 设计模式系列(二三)访问者模式(Vistor) 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以 ...
- Java 设计模式系列(十五)观察者模式(Observer)
Java 设计模式系列(十五)观察者模式(Observer) Java 设计模式系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Java ...
- Java 设计模式系列(十八)备忘录模式(Memento)
Java 设计模式系列(十八)备忘录模式(Memento) 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式.备忘录对象是一个用来存储另外一个对象内部状态 ...
- Java 设计模式系列(二十)状态模式
Java 设计模式系列(二十)状态模式 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式.状态模式允许一个对象在其内部状态改变的时候改 ...
- Java 设计模式系列(十五)迭代器模式(Iterator)
Java 设计模式系列(十五)迭代器模式(Iterator) 迭代器模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(interna ...
- Java 设计模式系列(十三)模板方法
Java 设计模式系列(十三)模板方法 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的 ...
- Java 设计模式系列(十二)策略模式(Strategy)
Java 设计模式系列(十二)策略模式(Strategy) 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以 ...
- Java 设计模式系列(二二)责任链模式
Java 设计模式系列(二二)责任链模式 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求 ...
- Java 设计模式系列(十四)命令模式(Command)
Java 设计模式系列(十四)命令模式(Command) 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复 ...
- Java 设计模式系列(十七)中介者模式
Java 设计模式系列(十七)中介者模式 用一个中介对象来封装一系列的对象交互.中介者使得各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互 一.中介者模式结构 Media ...
随机推荐
- MongoDB启动时遇到的问题
问题一:child process failed, exited with error number 100 原因分析:100是锁了 解决办法:#cd /usr/local/mongodb/data ...
- Q:elementUI中tree组件动态展开
1,在组件中设置展开收缩开关 default-expand-all="isExpand" 2,展开收起触发按钮 <div class="tree-foot cle ...
- C/C++ 无法解析的外部符号解决方案
{ //0 类的成员函数没有实现就调用 //1 调用没有编译生成cpp 的函数 //2 没有加载lib //3 最重要的就是有声明无实现 }
- springboot连接mysql数据库,JdbcTemplate和spring JPA方式
SQL部分 CREATE TABLE test( id ) primary key, name ) not null, age ), address ) ); ,,'bj'); ,,'sh'); ,, ...
- Element-UI 的树列表实现单选
1. Element-UI 的 el-tree 组件当设置了 show-checkbox 属性以后,默认是只能多选的,如果我们想要将其改选为单选,就要进行一些特殊的处理,首先看效果图. 2. 组件代码 ...
- bzoj1037题解
[解题思路] DP.f[i][j][x][y]表示已选了i个♂和j个♀,其中♂比♀多x,♀比♂多y(x,y≥0). 递推式转移方程: (f[i+1][j][x+1][max(y-1,0)]+=f[i] ...
- flutter 显示HTML代码
需求是后台返回的是富文本,所以需要吧富文本转成flutter 能识别的内容 找了几个插件只有这个比较好用写下来 dependencies: flutter_html: ^0.9.8 安装 下剩下的就比 ...
- 暴力”注入Explorer
暴力"注入Explorer pjf(jfpan20000@sina.com) 向一个运行中的进程注入自己的代码,最自然莫过于使用Cr ...
- 2015年7个重要的Web设计趋势
Web设计趋势每一年都会有所变化.但设计师的创意天赋是推动改变网页设计标准的法则.如果在2015年,网页缺少以下7个设计元素,必定被淘汰~ 1.排版更灵活 这部分的主要焦点在于,字体展现会受到新兴排版 ...
- 16-MySQL-Ubuntu-数据表的查询-分组与聚合(五)
分组(group by)一般与聚合结合使用 (1)查询按性别分组 select gender from students group by gender; (2)查询按性别分组并统计每组的数量sele ...