23种设计模式用法

总体来说设计模式分为三大类:


创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。


结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。


行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。


并发型模式和线程池模式。


设计模式6大原则:
1.开闭原则:对扩展开放,对修改关闭。
2.里氏替换原则:基类出现的地方,子类一定可以出现;实现开闭原则的关键步骤是抽象化,里氏替换原则是对实现抽象化的具体步骤的规范。
3.依赖倒转原则:针对接口编程,依赖于抽象而不依赖具体。
4.接口隔离原则:使用多个隔离的接口,比使用单个接口要好。(降低类之间的耦合度,降低依赖)
5.迪米特法则(最少知道原则):一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
6.合成复用原则:原则是尽量使用合成/聚合的方式,而不是使用继承。


1.工厂方法模式:

11.普通工厂方法模式:建立一个工厂类,对实现了同一接口的一些类进行实例的创建。(判断需要创建的对象的类型,返回对象实例)


12.多个工厂方法模式:对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供对个工厂方法,分别创建对象。(将判断对象类型改为多个方法)


13.静态工厂方法模式:将多个工厂方法模式里的方法设置为静态的,不需要创建实例,直接调用即可。


工厂模式适合:需要大量产品的创建,并且具有共同的接口时,一般采用13方式即静态工厂方法模式。


2.抽象工厂模式:
相对工厂方法模式,不适合拓展,违反开闭原则;抽象工厂模式直接增加新的工厂类而不需要修改之前的代码。(2个接口,分别是工厂类继承接口提供获取目标类的方法返回目标类,目标类继承目标接口)


3.单例模式:保证在一个JVM钟,该对象只有一个实例存在。
好处:类创建频繁会增大系统开销。
省去new操作符,降低系统内存的使用频率,减轻GC压力。
有些核心类只能存在一个。
使用private定义构造方法使其不能被外部实例化,并且在类内部定义该类对象的实例并且实例化,调用方法返回该对象实例,可以使用static初始化,synchronized锁同步。


4.建造者模式:
工厂类模式提供单个类的模式,而建造者模式这是将各种产品集中起来管理,用来创建复合对象(某个类具有不同的属性),建造者模式将很多功能集成到一个类里,这个类可以创造出比较复杂的东西。


5.原型模式:

将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象(浅复制、深复制(包括引用,使用字节和对象输入输出流))



以上为创建型模式。


继续结构型模式:
(1)适配器模式->类的适配器模式、对象的适配器模式、接口的适配器模式

(2)对象的适配器模式->装饰模式->代理模式->外观模式


(3)对象的适配器模式->桥接模式->组合模式->享元模式


6.适配器模式:

将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。
61.类的适配器模式:当希望将一个类转换成满足另一个F新接口的类时,可以使用类的适配器模式,创建一个A新类,继承原有的B类,实现新的接口即可。(接口方法包含A继承B继承F,实例A向上转型为F)


62.对象的适配器:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个A类,持有原B类的一个实例,在A类的方法中,调用实例的方法就行。


63.接口的适配器模式:当不希望实现一个接口中所有方法时,可以创建一个抽象类A继承接口,实现需要的方法,我们写别的类的时候,继承抽象类即可。


7.装饰模式:
给一个对象增加一些新的功能,而且是动态的,需要装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。
应用场景:需要拓展一个类的功能
动态的为一个对象增加功能,而且还能动态撤销(继承不能做到这一点,继承的功能是静态的,不能动态增删)
缺点:产生过多相似的对象,不易排错!


8.代理模式:

对一个代理类出来,替原对象进行一些操作

应用场景:如果已有的方法咋使用的时候需要对原有的方法进行改进,此时有2种方法:修改原有的方法来适应(违反开闭原则);采用一个代理类调用原有的方法且对产生的结果进行控制。


9.外观模式:
解决类与类之间的依赖关系
例如computer,内存、CPU、运存,需要有computer类来处理依赖关系,起到解耦的作用。


10.桥接模式:
把事物和其具体实现分开,使他们可以各自独立的变化。将抽象化和实现化解耦,使得二者可以独立变化,例如JDBC桥DriverManager,JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。


11.组合模式:
又叫部分-整体模式,在处理类似树形结构的问题是比较方便
应用场景:将多个对象组合在一起进行操作,常用于表示树形结构中,例如二叉树,数等


12.享元模式:
实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。
通过创建对象池,每次访问对象池有没有需要的对象实例,如果有则返回对象实例,如果没有,则新建该对象实例并访问。




继续行为型模式


1.父类与子类->策略模式、模板方法模式
2.两个类之间->观察者模式、迭代器模式、责任链模式、命令模式
3.类的状态->备忘录模式、状态模式
4.通过中间类->访问者模式、中介者模式、解释器模式


13.策略模式:

策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数。
策略模式的决定权在用户,系统本身提供不同的算法的实现,行政或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。


14.模板方法模式:
一个抽象类,有一个主方法,再定义1...n个方法,可以使抽象的,也可以使实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用


15.观察者模式:
当一个对象变化时,其他依赖该对象的对象都会受到通知,并且随着变化!对象之间是一种一对多的关系。例如订阅


16.迭代器模式:
顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。如集合的迭代器Iterator


17.责任链模式:
有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终哪个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整。请求可以使一条链,可以是一个树,还可以是一个环,模式本身不约束这个,需要我们机制去实现,同时,在一个时刻,命令只允许由一个对象传给另一个对象,而不允许传给多个对象。


18.命令模式:
例子:司令员发出口令,口令传递给士兵,士兵去执行。三者互相解耦,任何一方都不用去依赖其他人,只需要做好自己的事就行,司令员要的是结果,不会关注到底士兵是怎么实现的。(接口A生成命令方法,B类继承A,C类处理事件,D类发布命令,D传命令B,B传给C,C处理事件)
命令模式的目的就是达到命令的发出者和执行者之间的解耦,实现请求和执行分开


19.备忘录模式:
主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗地讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B用来存储A的一些内部状态,类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作。


20.状态模式:
当对象的状态改变时,同时改变其行为,很好理解,就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态,所以,状态模式就2点:1、可以通过改变状态来获得不同的行为。2、你的好友能同时看到你的变化。
根据这个特性,状态模式在日常开发中用的挺多的,尤其是做网站的时候,我们有时候希望根据对象的某一属性,区别开他们的一些功能,比如说简单的权限控制等。


21.访问者模式:
把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由的演化。访问者模式使用与数据结构相对稳定算法又易变化的系统。因为访问者模式使得算法操作增加变得容易。若系统数据结构对象易于变化,经常有新的数据对象增加进来,这不合适使用访问者模式,访问者模式的优点是增加操作很容易,英文增加操作意味着增加新的访问者。访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。其缺点就是增加新的数据结构很困难。


22.中介者模式:
中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其他关联的对象都得进行修改。如果使用中介者模式,只需关心和中介者类的关系,具体类类之间的关系及调度交给中介者就行


23.解释器模式:
主要应用在OOP开发中的编译器的开发中


想了解更详细内容可以下载资源看下》》设计模式讲解(网页版)













































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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值