![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
sq0723
这个作者很懒,什么都没留下…
展开
-
设计模式-----访问者模式
一、 定义访问者模式(Visitor),表示一个作用于某个对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式适用于数据结构相对稳定的系统。它把数据结构和作用于结构之上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。对于有比较稳定的数据结构,又有易于变化的算法的情况,适合用访问者模式。访问者模式的优点就是增加新的操作很容易。二、 结构图三、 示例代码(男人女人对比为例,待补充)...原创 2020-12-15 10:06:52 · 88 阅读 · 0 评论 -
设计模式------解释器模式
一、 定义解释器模式(interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式的好处是很容易改变和扩展文法。二、 结构图三、 示例代码(乐谱翻译为例,待补充)...原创 2020-12-14 18:55:01 · 74 阅读 · 0 评论 -
设计模式------享元模式
一、 定义享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。应用:1)如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑使用2)对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,可以考虑使用享元模式。二、 结构图三、 示例代码...原创 2020-12-10 16:03:03 · 98 阅读 · 0 评论 -
设计模式------中介者模式
一、 定义中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。中介者减少了其他一系列对象的交互,但是由于对其他一系列对象控制集中到了中介者类上,如果此类出现问题,则整个系统都会出问题。选用中介者模式要考虑清楚,尤其是多对多的关系时。二、 结构图三、 示例代码...原创 2020-12-10 15:03:33 · 71 阅读 · 0 评论 -
设计模式------职责链模式
一、 定义职责链模式(Chain of Responsibility),使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。优点:二、 结构图三、 示例代码(以公司的请假审批流程为例,待补充)...原创 2020-12-10 12:51:35 · 91 阅读 · 0 评论 -
设计模式------命令模式
一、 定义命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。二、 结构图三、 示例代码(以烤肉店点餐为例,待补充)...原创 2020-12-09 18:17:09 · 81 阅读 · 0 评论 -
设计模式------桥接模式
一、 定义桥接模式(Bridge),将抽象部分与它的实现分离,使它们都可以独立地变化。可以理解为实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,以减少它们之间的耦合。二、 结构图三、 示例模式...原创 2020-12-08 18:49:26 · 70 阅读 · 0 评论 -
设计模式------单例模式
一、 定义单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。二、 示例代码(待补充)原创 2020-12-08 18:05:33 · 81 阅读 · 0 评论 -
设计模式------迭代器模式
一、 定义迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而不暴露该对象的内部表示。当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,考虑用迭代器模式。二、 结构图三、 示例代码(待补充)...原创 2020-12-08 18:04:38 · 52 阅读 · 0 评论 -
设计模式------组合模式
一、 定义组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。当需求中是体现部分与整体层次的机构时,或者希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑用组合模式了。二、 结构图三、 示例代码(待补充)...原创 2020-12-08 18:03:33 · 44 阅读 · 0 评论 -
设计模式------备忘录模式
一、 定义备忘录模式(Memento),在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。以后就可将该对象恢复到原先保存的状态。当功能比较复杂,需要维护和记录的属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,可以使用备忘录模式。二、 结构图三、 示例代码...原创 2020-12-04 19:05:53 · 67 阅读 · 0 评论 -
设计模式------适配器模式
一、 定义适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。当系统的数据和行为都正确,但接口不符时,考虑用适配器模式。二、 结构图三、 示例代码(待补充)...原创 2020-12-04 19:04:27 · 55 阅读 · 0 评论 -
设计模式------状态模式
一、 定义状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。主要解决的是控制一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,可以考虑用状态模式。二、 结构图 具体的状态类中,每一个子类实现一个与Context的一个状态相关的行为,子类之间可以有状态的跳转。三、 示例代码(以工作时间的工作状态为例,待补原创 2020-12-03 11:05:34 · 90 阅读 · 0 评论 -
设计模式------抽象工厂模式
一、 定义抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。二、 结构图抽象工厂模式的抽象工厂类可以使用一个抽象类来实现,通过反射(依赖注入)和配置等方式,使代码面对需求变化时,改动最少。三、 示例代码(以数据库访问为例,待补充)...原创 2020-12-03 11:04:16 · 147 阅读 · 0 评论 -
设计模式----观察者模式
一、 定义观察者模式(又叫发布-订阅模式),定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。应用场景:当一个对象的改变需要同时改变其他多个对象时,并且它不知道具体有多少对象有待改变时,考虑使用观察者模式。观察者模式主要是解除耦合,让耦合的双方都依赖于抽象而不是依赖于具体。二、 结构图三、 示例代码(以观察老板的状态为例,待补充)...原创 2020-12-01 14:09:39 · 51 阅读 · 0 评论 -
设计模式------建造者模式
一、 定义建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。该模式主要用于一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。二、 结构图三、 示例代码(以游戏中建造不同的小人为例)...原创 2020-11-27 17:47:31 · 56 阅读 · 0 评论 -
设计模式------外观模式
一、 定义外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式是迪米特法则的典型应用。二、 结构图三、 示例代码(理财基金为例,待补充)...原创 2020-11-26 16:47:12 · 84 阅读 · 0 评论 -
设计模式------模板方法模式
一、 定义模板方法模式(TemplateMethod),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。二、 结构图三、 示例代码(考试场景为例,待补充)...原创 2020-11-26 16:46:10 · 77 阅读 · 0 评论 -
设计模式-----原型模式
一、 定义原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建对象,就是从一个对象再创建另外一个可定制的对象,而且不需要指定任何创建的细节。拷贝涉及到深拷贝和浅拷贝,浅拷贝指被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。深拷贝,把引用对象的变量指向复制过得新对象,而不是原有的被引用对象。原型模式通常适用于以下场景。• 对象之间相同或相似,即只是个别的几个属性不同的时候。• 创建对象成本较大,例如初始化时间长,占用CP原创 2020-11-25 09:50:04 · 57 阅读 · 0 评论 -
设计模式------工厂方法模式
一、 定义工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到子类。简单工厂模式中工厂类包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类。工厂方法模式中,客户端决定实例化哪一个工厂,这里相当于把简单工厂模式中在工厂类中的逻辑判断移到了客户端代码中判断。工厂方法模式克服了简单工厂模式中开放-封闭原则的不足。二、 结构图三、 示例代码(待补充)...原创 2020-11-20 18:38:23 · 77 阅读 · 0 评论 -
设计模式------代理模式
一、 定义代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。二、 结构图三、 示例代码(待补充)原创 2020-11-20 18:37:01 · 64 阅读 · 0 评论 -
设计模式--------简单工厂模式
一、 定义创建一个工厂类,根据不同的参数返回不同的实例二、 组成一个抽象类,多个具体类,一个创建类,创建类中根据不同的参数返回不同的类三、 代码实现(后面完成,以计算器为例)待补充...原创 2020-11-06 14:41:34 · 58 阅读 · 0 评论 -
设计模式------装饰模式
一、 定义装饰模式(Decorator),动态的给一个对象添加一些额外的职责,为已有功能动态的添加更多功能的一种方式。装饰模式把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象。二、 结构图Component是定义一个对象接口,可以给这些对象动态的添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator是装饰抽象类,继承自Component类,从外类扩展Component的功能。ContreteDecorator是具体的装饰对原创 2020-11-17 17:15:05 · 67 阅读 · 0 评论 -
设计模式------面向对象特征及原则
面向对象特征:封装、继承、多态面向对象原则:一、 单一职责原则(SRP)就一个类而言,应该仅有一个引起它变化的原因。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。二、 开放-封闭原则软件实体(类、模块、函数等)应该可以扩展,但是不可以修改。对应扩展是开放的,对于修改是封闭的。面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。应对可能发生的变化,通过构造抽象来完成。开放-封闭原则是面向对象设计的核心所在,可以使程序可维护、可扩展、可复用、灵活性好。三原创 2020-11-12 19:10:55 · 83 阅读 · 0 评论 -
设计模式-----策略模式
一、 定义**策略模式(Strategy)**定义了一组算法,分别封装起来,让它们之间可以相互替换,使算法的变化不会影响到使用算法的用户。策略模式封装了变化,如果需求是在不同的时间应用不同的业务规则,则可以考虑用策略模式,优点有:1) 以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合2) 简化了单元测试,每个算法有自己的类,可以通过自己的接口单独测试二、 结构图三、 示例代码以商场收银为例,各种促销方式即各种总额计算方法。(代码待补充)四、 策略模式和简单工厂模式结合两原创 2020-11-10 10:25:08 · 64 阅读 · 0 评论