学习设计模式笔记(一)部分总结

来源:互联网 发布:红旗linux怎么打开终端 编辑:程序博客网 时间:2024/06/05 15:11

几年前,我自己读过一些设计模式的书籍,但是当年毕竟经验太少或者说没有,看设计模式总是似懂非懂,如今已经工作几个月了,对面向对象也算是有了个初步的认识,在来学习设计模式,感觉简单多了,当然要想灵活运用设计模式,我想还是会有很长一段路要走。GOF定义了23种设计模式,目前只学习了7种,先部分总结一下,书籍《研磨设计模式》写的总体浅显易懂,结合网上搜索到的一些资料,总结。

在总结模式之前,向上转型应该是所有模式的基础了吧,定义一个接口,之后可以以接口类型来引用实现接口的类,当然抽象类也是可以的,比如创建对象可以

接口类型  引用名  =  new  具体实现类(); 这样只要调用接口中定义的方法即可调用具体实现类中的具体方法。

(1)简单工厂模式:创建型模式


通过简单工厂模式,可以创建对象,达到了客户端和具体实现类解耦的目的,简单说,我只要调用简单工厂的静态创建方法,传递一个int类型的值,它就会返回对应类型的对象。但是简单工厂缺点也很明显,每次扩展都需要去修改简单工厂类。简单工厂的本质是:选择实现。

(2)外观模式:结构型模式


外观模式,对于我自己的理解就是向客户端隐藏具体的复杂调用其他接口的实现,提供一个统一的接口供客户端使用,从而达到松散客户端与子系统各个组件的耦合关系,你不需要了解具体内部实现,也不需要跟众多子系统进行交互,直接调用外观类的接口即可。感觉,MVC中,业务层去调用各个DAO层的方法,其实也是一种外观模式的体现。缺点,过多的外观模式容易导致混乱,到底直接调用子系统还是外观类好呢?

(3)适配器模式:结构型模式


当客户端需要一个特定类型的接口时,现有对象的接口不匹配时候,使用适配器模式,他可以提供更好的复用和扩展。其实适配器模式的方法中,也只不过是调用了被适配的哪个类的接口而已,相当于就是把接口名字重命名了一遍,所以缺点很明显,过多的适配器也会引起混乱,明明调用的是A接口被适配成了B接口来实现。

(4)单例模式:创建型模式


当客户端需要在运行期间创建一个类的实例时使用此模式,需要注意的是,该模式的构造方法为私有,否则客户端可以通过实例化多个单例类,来创建多个对象。被创建对象在单例类内部中,应是一个静态类型,这样既可以确保只被实例化一次。当然这样还会存在线程问题,如果有线程问题,还需要使用同步块来完成。

(5)工厂方法模式:创建型模式


工厂方法同样用来创建对象,与简单工厂模式不同的是,扩展更加方便,一个具体工厂类对一个产品类,工厂接口或者抽象类不需要实现具体创建对象的方法,而是将这些方法延迟到了工厂子类来实现,这样带来的好处就是易扩展,不违反开闭原则,未来有新的产品类,只需要再扩展出一个相应的工厂类即可实现。缺点:具体产品对象和工厂方法是耦合的。

(6)抽象工厂模式:创建型模式


对于抽象工厂模式来说,有一个关键词——产品簇,即相互依赖的或者说是有互相约束关系的对象,比如电脑主板和CPU不同针脚数是不能随意搭配的,900针脚和1000针脚的怎么能兼容呢,这是其他工厂模式没法做到的,而抽象工厂模式可以创建这种有约束关系的对象。优点分离了接口和实现,切换产品簇变得容易。缺点,扩展新的产品较繁琐,比如需要给整个产品簇中增加一个新的产品,需要去修改所有工厂实现类。


先总结到这里,后续将更新

原创粉丝点击