面向对象的23种设计模式

设计原则:高内聚低耦合,开闭原则。
两大基础设计原则
在说面向对象设计的六大原则之前,我们先来说下程序设计的原则:模块内高内聚,模块间低耦合。我们在面向对象时只需把类看成模块,那么就容易理解封装等了。

说是七大原则,这里我先提出来一个:对扩展开放,对修改关闭。 为啥这么说,因为我们都知道软件是要改的。对扩展开放保证了可以增加功能,像泛型啦这些。对修改关闭保证了像前的兼容性,jdk7兼容jdk6这样。所以开闭原则围绕软件的整个生命周期。

从基础原则出发,产生六个具体的原则:
1.单一职责(一个方法或一个类只做一件事,为了模块内高内聚) 
2.迪米特法则(也叫最少知道原则,为了模块间低耦合) 
3.里氏替换(就是继承原则,子类可以无缝替代父类。很好的符合了开闭原则) 
4.依赖倒置(类之间的依赖通过接口实现,低耦合的同时对扩展开放) 
5.接口隔离(即把单个复杂接口拆分为多个独立接口,与上条共同实现面向接口编程) 
6.合成复用原则(即尽量使用合成/聚合的方式,而不是使用继承。主要为了防止继承滥用而导致的类之间耦合严重。记住只有符合继承原则时才用继承)

设计模式
我觉得程序员最好的沟通方式是代码,所以每个设计模式都是一个例子。所有例子都很方便,可以复制直接运行。因为对java熟悉,所以下面设计模式例子都是用java语言来实现的。

创建型模式(IOC:控制反转,就是创建分离的集大成)
1.Singleton:单例模式(全局只要一个实例) 
2.Prototype:原型模式(通过拷贝原对象创建新对象) 
3.Factory Method:工厂方法模式(对象创建可控,隐藏具体类名等实现解耦) 
4.Abstract Factory:抽象工厂模式(解决对象与其属性匹配的工厂模式) 
5.Builder:建造者模式(封装降低耦合,生成的对象与构造顺序无关) 
创建型模式的五种有各自的使用环境,单例和原型比较简单就不说了,工厂方法模式和建造者模式,都是封装和降低耦合有啥不同呢,其实工厂方法关注的是一个类有多个子类的对象创建(汽车类的各种品牌),而建造者模式关注的是属性较多的对象创建(能达到过程无关)。而抽象工厂模式关注的是对象和属性及属性与属性的匹配关系(如奥迪汽车与其发动机及空调的匹配)。

结构型模式(对象的组成以及对象之间的依赖关系)
1.Adapter:适配器模式(适配不同接口和类,一般解决历史遗留问题) 
2.Decorator:装饰器模式(比继承更灵活,可用排列组合形成多种扩展类) 
3.Proxy:代理模式(可以给类的每个方法增加逻辑,如身份验证) 
4.Facade:外观模式(对模块或产品的封装,降低耦合) 
5.Bridge:桥接模式(就是接口模式,抽象与实现分离) 
6.Plyweight:享元模式(相同对象的重用) 
7.Composite:组合模式(整体和部分相同时,如文件夹包含文件夹) 
我们可以看到适配器模式、装饰器模式、代理模式都可以用包装对象来实现(把对象作为一个属性放在用的对象里),所以模式关注的并不是实现,而是解决的问题。模式更多体现的是类与类之间的逻辑关系,比如代理模式和装饰器模式很像。但从字面就知道,代理是访问不了实际工作对象的,这是他们的区别。

行为型模式(即方法及其调用关系)
1.Strategy:策略模式(提供功能不同实现方式,且实现可选) 
2.Template Method:模板方法模式(相同流程用一个模板方法) 
3.Observer:观察者模式(用订阅-发布实现的被观察者变化时回调) 
4.Iterator:迭代器模式(一种内部实现无关的集合遍历模式) 
5.Chain of Responsibility:责任链模式(事件处理的分层结构产生的责任链条) 
6.Command:命令模式(将命令者与被命令者分离) 
7.Memento:备忘录模式(需要撤销与恢复操作时使用) 
8.State:状态模式 (当对象两种状态差别很大时使用) 
9.Visitor:访问者模式 (当对同一对象有多种不同操作时使用) 
10.Mediator:中介者模式(以中介为中心,将网状关系变成星型关系) 
11.Interpreter:解释器模式(常用于纯文本的表达式执行)

写完设计模式之后感觉设计模式更多的一种逻辑关系,如果代码中有这种逻辑关系就可以用了。记得需要时候再用,不能为了设计模式而设计模式。没有什么就是好的,最主要用起来舒服吧。
--------------------- 
作者:万明智 
来源:CSDN 
原文:https://blog.csdn.net/wanyouzhi/article/details/77248710 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值