设计模式
Grace-tt
一枚非常上进的小白
展开
-
设计模式六大原则
设计模式定义设计模式是人们在面对同类型软件工程设计问题所总结出的一些有用经验。模式不是代码,而是某类问题的通用解决方案。设计模式是软件开发人员经过相当长时间的试验和错误总结出来的解决一些通用问题的宝贵经验。每一种设计模式都描述了一个经常出现的问题以及该问题的核心解决方案。设计模式目的设计模式的本质目的在于提高软件的可维护性、可扩展性、灵活性。设计模式六大原则1.单一职责原则(S...原创 2020-05-06 10:17:02 · 209 阅读 · 6 评论 -
Strategy策略模式(行为型模式)
动机(Motivation)在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一种性能负担。如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?意图(Intent)定义一系列算法,把它们一个个封装起来,并且使它们可以互相替换,该模式使得算法可以独立于使用它的客...原创 2020-05-05 20:29:44 · 244 阅读 · 2 评论 -
Visitor访问者模式
动机(Motivation)在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。如何在不更改类层次结构的前提下,在运行时根据需要透明地为类层次结构上的各个类动态添加新的操作,从而避免上述问题?意图(Intent)表示一个作用于某对象结构中的各元素的操作。它可以在不改变各元素的...原创 2020-05-05 11:49:14 · 265 阅读 · 3 评论 -
State状态模式
动机(Motivation)状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的逻辑简单化。当然,如果这个状态判断很简单,那就没有必要使用“状态模式”了。意图(Intent)当一个对象的内部状态改变时允许改变其行为,这个对象看起来像是改变了其类结构(Structure)其中,State:抽...原创 2020-04-21 12:13:59 · 271 阅读 · 5 评论 -
备忘录Memento模式
动机(Motivation)在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,会暴露对象的实现细节。如何实现对象状态的良好保存与恢复?但同时又不会因此而破坏对象本身的封装性?意图(Intent)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以...原创 2020-04-20 20:20:16 · 190 阅读 · 5 评论 -
职责链模式Chain of Responsibility(行为型模式)
动机(Motivation)在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合。如何使请求的发送者不需要指定具体的接受者?让请求的接受者自己在运行时决定来处理请求,从而让两者解耦。意图(Intent)使多个对象有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并...原创 2020-04-20 17:32:38 · 149 阅读 · 7 评论 -
Observer观察者模式
观察者模式又叫发布-订阅(Publish/Subscribe)模式动机(Motivation)在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合...原创 2020-04-19 20:23:36 · 171 阅读 · 4 评论 -
Iterator迭代器模式(行为型模式)
集合内部与外部访问左边是链表式的集合,右边是数组集合,迭代器实现的效果是不管集合是链表式还是数组形式,都可以在不暴露内部结构的同时,让外部客户代码透明地访问其中包含的元素。动机(Motivation)在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“同一种算法...原创 2020-04-18 21:32:28 · 154 阅读 · 1 评论 -
Mediator中介者模式(行为型模式)
动机(Motivation)在软件构建过程中,经常会出现多个对象相互关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。在这种情况下,我们可以使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用,从而更好地抵御变化。意图(Intent)用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要...原创 2020-04-18 19:59:40 · 211 阅读 · 1 评论 -
Command命令模式(行为型模式)
目录动机(Motivation)意图(Intent)结构(Structure)Command模式的几个要点Exampel动机(Motivation)在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合--比如需要对行为进行“记录、撤销/重做(undo/redo)、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“...原创 2020-04-16 20:29:53 · 296 阅读 · 2 评论 -
Template Method模板方法(行为型模式)
目录意图(Intent)结构(Structure)Template Method模式的结构要点应用场景Example意图(Intent)定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。结构(Structure)其中,AbstractClass:实现了一个...原创 2020-04-15 21:24:10 · 253 阅读 · 4 评论 -
Proxy代理模式(结构型设计模式)
意图(Intent)为其他对象提供一种代理以控制对这个对象的访问。结构(Structure)其中,Subject类:定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用到ProxyRealSubject类:定义Proxy所代表的真实实体Proxy代理类:保存一个引用使得代理可以访问实体,并提供一个与Subject的接...原创 2020-04-15 17:43:55 · 225 阅读 · 4 评论 -
Flyweight享元模式(结构型模式)
目录意图(Intention)结构(Structure)两个状态Flyweight模式的几个要点适用场景Example意图(Intention)运用共享技术有效地支持大量细粒度的对象。结构(Structure)其中,Flyweight抽象享元对象:为具体享元角色规定了必须实现的方法,而外部状态是以参数的形式传入此方法。ConcreteFlywei...原创 2020-04-15 11:21:08 · 139 阅读 · 4 评论 -
Façade外观(结构型模式)
目录意图(Intention)结构(Structure)优点适用于几种模式的区分Example意图(Intention)为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。结构(Structure)其中,Facade:外观类为子系统提供一个共同的对外接口ubsystem classes:...原创 2020-04-14 18:46:46 · 625 阅读 · 5 评论 -
Builder生成器
意图(Intent)将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。解释:以建造房屋为例,建造房屋的构成不变,其中各个部分:窗,床,门等会变化。例如,今天是纱窗,明天换成玻璃窗,今天是欧式风格的床,明天换成木板床,构建不变,但是他们的表示会不断地变化。动机(Motivation)在软件系统中,有时候面临着“一个复杂对象(房屋)”的创建工作,其通常由各个部分...原创 2020-04-05 21:45:32 · 260 阅读 · 3 评论 -
Singleton单例模式
定义单例模式属于创建型设计模式,单例模式要保证一个类仅有一个实例,并且提供一个访问它的全局访问点。结构图动机为什么要用到单例模式呢?对于一些系统来说,一个系统只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统。如果不对窗口创建进行管理,可能会弹出多个内容一样的窗口,则是重复现象,浪费内存资源。通常我...原创 2020-04-04 21:30:48 · 164 阅读 · 5 评论 -
抽象工厂模式(Abstract Factory Pattern)
定义(Definition)抽象工厂模式为一个产品家族提供了统一的创建接口。当需要这个产品家族的某一系列的时候,可以从抽象工厂中选出相对的系列来创建一个具体的工厂类别。动机(Motivation)在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。结构(Structure)角色(Roles)抽象工厂(Ab...原创 2020-03-28 21:13:12 · 204 阅读 · 8 评论 -
工厂方法(Factory Method)模式
引言(Introduction)上一篇博客以手机工厂为例介绍了简单工厂模式,将创造OPPO手机和OPPO手机对象的逻辑都放在了内部PhoneFactory里面,并且分别创建了两个具体手机产品类OPPOPhone,OPPOPhone,具体Create哪类手机,就要看传入的参数了。这是,如果该手机工厂想要扩大生产规模,加入小米手机的生产,我们需要变动三个地方:增加一个XiaoMiPhone的具体产...原创 2020-03-28 09:44:03 · 318 阅读 · 5 评论 -
简单工厂模式
目录定义UML类图角色优点缺点适用场景举例定义简单工厂模式属于创建型模式,又叫静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建哪一种产品的实例。UML类图角色工厂(Factory):静态工厂,整个简单工厂模式的核心部分,里面有负责创建所有具体类产品实例的内部逻辑。工厂类的创建对象的方法可以根据参...原创 2020-03-24 11:36:19 · 149 阅读 · 7 评论