
1、创建型模式的本质,就四个字:代理生产。服务类并未改变。(花絮:服务类对客户类说:我研发太累了,你找个人帮你生产吧,于是创建型5种模式产生了。)
单例模式:【客户类】→【单例类/单例方法】→ 创建【服务类】
工厂方法:【客户类】→【工厂类/工厂方法】→ 创建【服务类】
构造模式:【客户类】→【构造类/构造方法】→ 创建【服务类】
抽象工厂:【客户类】→【抽象工厂类】→【工厂类|单例方法】→ 创建【服务类】
原型模式:【客户类】→【服务类/克隆方法】→ 创建【服务类】
2、结构型模式的本质,就四个字:重新包装。新构建的模式类将服务类作为成员,就像包装盒一样。而真正服务类被隐藏在后面。服务类并未被改变。(花絮:客户类对服务类说:你的包装太不友好了,于是结构型7种模式产生了。)
组合模式:【客户类】→【组合类】→ 多个相关的【服务类】
外观模式: 【客户类】→【外观类】→ 多个无关的【服务类】
代理模式: 【客户类】→【代理类】→ 【服务类】
适配器模式: 【客户类】→【适配器类】→ 【服务类】
装饰模式: 【客户类】→【装饰类】→ 【服务类】
桥接模式: 【客户类】→【桥接类】→ 【服务类】
享元模式: 【客户类】→【享元池类】→ 【服务类】
3、行为型模式的本质,也四个字:得力助手。新构建的模式类,协助服务类一起对外向客户类提供服务。这样的话,服务类也需要在模式接口的约束下做出一些改变。一般情况下,新构建的模式类与服务类相互引用,相互成员。(花絮:服务类对自己说:这真不是人干的活,找个助手吧,于行为型11模式出现了)
(解释器与命令行两个模式比较特别,这里不讲了。下面*表示实现了相应接口的类)
迭代器模式: 【客户类】→ 【迭代器类 +*服务类】。需要构建迭代器类、迭代方法、服务类成员数组,而服务类需要实现迭代方法。此模式的意义在于:客户类快速访问预先加载的一组服务类实例。
观察者模式:【客户类】→ 【*服务类+观察者类】。需要构建观察者类,服务类需要管理观察者成员,并在业务改变时实时通知所有观察者。此模式的意义在于:客户类通过观察者作为助力,实时获取服务类动态。实时二字。
访问者模式:【客户类】→ 【*服务类+访问者类】 。需要构建访问者类、访问方法及服务类成员,而服务类不需要管理访问者,但需要为访问者提供访问方法,把自己的引用传给它,最后执行访问者的访问方法。此模式的意义在于:访问者种类繁多、习惯不一,而服务类只能提供单一的数据来应对。客户类通过访问类助力,减化访问逻辑。
备忘录模式:【客户类】→ 【*服务类+备忘录类】 。需要构建备忘类,而服务类也需要构建备忘类成员、实现备份方法与恢复方法,以实现对服务类状态的恢复功能。此模式的意义在于恢复二字。客户类通过备忘录类助力,实现恢复功能。
状态模式:【客户类】→ 【*服务类】 。大多数情况下不用构建专门的状态类,服务类需要实现状态成员变量、不同状态下的状态操作。
策略模式:【客户类】→ 【*服务类+策略类】 。需要构建策略类,而服务类需要创建策略成员,并在业务实现过程中,用到策略,并产生实际的效果。策略模式的意义在于业务处理过程的模式化。
责任链模式:【客户类】→ 多个【*服务类】 。不需要构建责任链模式类,而服务类需要构建其它同接口服务类的指针成员,并在业务方法中实现如此逻辑(成功返回,失败指向下一个服务类)。
中介者模式:【客户类】→ 【*服务类+备忘录类】 。需要构建中介者类、通信方法,中介者类必须管理服务类(这里把服务类当成用户),而服务类必须构建中介者的成员指针、通信方法。服务类之间相互通信只能靠中介者类。
模板方法:【客户类】→ 【*服务类】 。多数情况下不需要构建出模板类,而服务类需要虚构出模板方法,实现对其下多个业务方法进行调用。这个虚构方法就是模板方法,它可以被重载。
网友评论