创建型模式:

一、简单工厂,工厂方法,抽象工厂

简单工厂:只有一层抽象,由工厂去获得抽象类的具体对象,工厂内的方法可以看做静态方法

工厂方法:有两个抽象,工厂的抽象和具体类的抽象。

举个例子: 有个汽车生产工厂,最开始规模比较小,轿车和SUV啊客车等在一个车间里面,你要哪个车就对这个工厂说,我要xx车,这个工厂就出来一个这个车。

一段时间的运行效益越来越好,要把这三条流水线分开,就分出了三个工厂,轿车工厂,SUV工厂和客车工厂。

工厂方法和简单工厂相比,1工厂方法更好的实现了开闭原则,要增加类只需要增加代码,简单工厂会改类里面的代码,会增加分支判断2工厂方法把简单工厂的if else分支判断交给了客户端

抽象工厂:拿数据库的例子来说,有user表操作接口(包括SQL实现,和access实现)有dept表操作接口(包括SQL实现和access实现)  抽象工厂类(获取user表操作,获取dept表操作) 具体实现类(SQL工厂access工厂)。 抽象工厂的客户端需要知道有哪些工厂可以选择,先new出来具体的工厂,再用具体的工厂获取具体的对象。

抽象工厂这个例子里面有两种具体的表(user和dept),两个处理方式(SQL和access)。 按处理方式来分成两种工厂,每个工厂都有两种抽象的表处理, 每个表处理是一种抽象。

二、单例模式

单例模式的特点是有两个类(一个业务类构造方法私有,一个工厂类负责保存业务类的单例,注意多线程的使用)

三、建造者模式

建造过程分为几部分,由Builder决定

具体的创建部分,由具体的类Dress决定

创建部分的先后顺序,由Director决定

建造者模式可以将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

四、原型模式

结构型设计模式

适配器模式、桥接模式、装饰模式、组合模式、享元模式、代理模式、外观模式

死亡之组啊、。

适配器模式:

桥接模式:

品牌和软件可以独立变化,增加

装饰模式:

组合模式:

享元模式:

程序设计中,有时需要生成大量细粒度的类实例来表示数据,如果能发现这些实例除了几个参数外基本都是相同的,如果能把那些参数移到类实例外面,在方法调用时将它们传进来,就可以通过共享大幅度减少单个实例的数目User变化的  website不变的

什么情况用享元模式:
如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑使用;还有就是对象的大多数状态是外部状态 如果删除对象的外部状态,可以用相对较少的共享对象取代很多组对象,也可以考虑用享元模式

代理模式:

应用场景一:远程代理,为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实
应用场景二:虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。例如很大的HTML网页,图片框通过虚拟代理替代了真实的图片
应用场景三:安全代理,用来控制真实对象访问时的权限。一般用于对象应该有不同的访问权限的时候。
应用场景四:智能指引,是指当调用真实的对象时,代理处理另外一些事。如计算真实对象引用次数,访问一个世纪对象时,检查是否已经锁定它,确保其他对象不能改变它。都是通过代理在访问一个对象时附加一些内务处理

外观模式:

行为型设计模式一:

观察者模式、模板方法模式、命令模式、状态模式、职责链模式

观察者模式:

观察者模式又叫发布-订阅模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。
这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己

模板方法模式:

当要完成在某一细节层次一致的一个过程或一系列步骤,
但其个别步骤在更详细层次上的实现可能不同时,我们通常考虑用模板方法模式来处理

当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方
这样就帮助子类摆脱重复的不变行为的纠缠

命令模式:

命令模式好处 ; 把请求一个操作的对象与知道怎么执行一个操作的对象分割开
1较容易设计一个命令队列
2在需要的情况下,较容易将命令记入日志
3允许接收请求一方是否要否决请求
4容易实现请求的撤销和重做
5加新的命令类很容易

状态模式:简单版

复杂版,上班的状态。

职责链模式:

行为型设计模式二组:

解释器模式、中介者模式、访问者模式、策略模式、备忘录模式、迭代器模式

解释器模式:

如果要增加一个音速
直接增加一个Speed类,然后在客户端条件判断里面加一个分支
可以用简单工厂加反射这样可以不用增加客户端代码了。

中介者模式:

中介者与同事类要互相关联
中介者模式很容易在系统中应用,也很容易在系统中误用,当系统中出现了‘多对多’交互复杂的对象群时,不要急于使用中介者模式,
而要先反思你的系统在设计上是否合理
中介者模式优点:
mediater的出现减少了各个Colleague的耦合,使得可以独立改变和复用各个Colleague类和mediater
其次由于把对象如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来
也就是站在一个更宏观的角度看待系统
中介者模式缺点:
由于ConcreteMediater控制了集中化,于是就把交互复杂性变为了中介者的复杂性,这样就使得中介者会变得比任何一个ConcreteColleague都复杂。

应用场景:中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合 以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合

访问者模式:

这样如果要增加结婚状态就很方便了
男女对比这么多的原因是因为人类在性别上就只有男人和女人两类,这也正是访问者模式可以实施的前提
(保证了Action类中的方法数量稳定)
访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化
访问者模式的目的是要把处理从数据结构分离出来,很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于
变化的算法的话,使用访问者模式就是比较合适的,因为访问者模式使得算法操作的增加变得容易
反之,如果这样的系统数据结构对象易于变化,经常要有新的数据对象增加进来 ,就不适合使用访问者模式

优点: 增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者,访问者模式将有关的行为集中到一个访问者对象中
缺点: 使增加新的数据结构变得困难

策略模式:

该例中,策略模式用来封装算法。但在实践中,可以用它来封装几乎任何类型的规则,只要分析不同规则之间的相同点,抽象出
抽象类或接口。然后再基于抽象类或接口进行编程

备忘录模式:

Role,记录当前时刻内部状态、负责创建备忘录、用备忘录恢复内部状态

Memento,负责保存Role内部状态。由Role去恢复。Caretaker负责传递备忘录

Caretaker,负责保存备忘录,不能对备忘录的内容进行操作或检查

为了安全。对客户端来说,备忘录应不可见

用到需要撤销的情况,可以用备忘录去实现,恢复到之前状态这样的

迭代器模式:

oop设计模式抽象总结的更多相关文章

  1. OOP设计模式在路上(一)——简单工厂模式

    前言 目前以LabVIEW为主要开发工具,熟悉常规开发框架(队列+状态机),个人用得比较多也感觉比较好用和强大的(JKI,AMC),也用它们开发过一些测试平台,但感觉到了一个瓶颈期,想寻求突破,提升L ...

  2. 面向对象程序设计(OOP设计模式)-行为型模式之观察者模式的应用与实现

    课程名称:程序设计方法学 实验5:OOP设计模式-行为型模式的应用与实现 时间:2015年12月02日三,第3.4节地点:理 一.实验目的 加深对行为型设计模式的理解以及在开发中的实际应用能力. 二. ...

  3. 面向对象程序设计(OOP设计模式)-结构型模式之装饰器模式的应用与实现

    课程名称:程序设计方法学 实验4:OOP设计模式-结构型模式的应用与实现 时间:2015年11月18日星期三,第3.4节 地点:理1#208 一.实验目的 加深对结构型设计模式的理解以及在开发中的实际 ...

  4. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  5. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  6. linkin大话设计模式--抽象工厂

    linkin大话设计模式--抽象工厂 在前面讲到的简单工厂里面虽然实现了我们那个类和其中的依赖的解耦,但是在产生我们需要的依赖的那个工厂里面还是和具体的产品类耦合了  现在要是还想彻底解耦的话怎么办呢 ...

  7. 设计模式——抽象工厂(Abstract Factory)

    Abstract Factory 抽象工厂模式(创建型模式): new的问题:实现依赖,不能应变应对“具体实例化类型”的变化. 解决思路:--封装变化点:哪里变化,封装哪里           - - ...

  8. JAVA设计模式--抽象工厂模式

    抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...

  9. 深入浅出设计模式——抽象工厂模式(Abstract Factory)

    模式动机在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法.但是有时候我们需要一个工厂可 ...

随机推荐

  1. POJ 1060:Modular multiplication of polynomials

    Modular multiplication of polynomials Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4 ...

  2. html5 canvas程序演示--P1197 [JSOI2008]星球大战

    html5 canvas程序演示--P1197 [JSOI2008]星球大战 <!doctype html> <html> <head> <meta char ...

  3. mybatis多表关联配置

    首先需要的jar包 mybatis-3.4.1 配置文件(mybatis.cfg.xml) <?xml version="1.0" encoding="UTF-8& ...

  4. ViewControl的size设为freeform

    freeform的用处是让你写一些不标准的view,比如说自定义一个cell,或者自己写一个小的VIEW,freeform的XIB是可以自己拖拽更改大小的

  5. MSD6A628开发资料与技术支持

    MSD6A628VX/VXM是mstar推出的低成本安卓智能网络电视方案,628分两个版本,一个是内置512MB内存,一个是外挂1G内存, 安卓4.4系统,4核A7处理器,Mali450MP2 GPU ...

  6. 洛谷 P1865 A % B Problem(求区间质数个数)

    题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格式: 对 ...

  7. JavaScript--DOM方法

    getElementsByName()方法 返回带有指定名称的节点对象的集合. 语法: document.getElementsByName(name) 与getElementById() 方法不同的 ...

  8. [C++ STL] list使用详解

    一.list介绍: List由双向链表(doubly linked list)实现而成,元素也存放在堆中,每个元素都是放在一块内存中,他的内存空间可以是不连续的,通过指针来进行数据的访问,这个特点使得 ...

  9. [JOI2014] 小笼包

    题面 : https://www.ioi-jp.org/joi/2013/2014-yo/2014-yo-t6/2014-yo-t6.html 题解 dp + 康托展开 一看这题不知道怎么处理 只能枚 ...

  10. 状态压缩+枚举 UVA 11464 Even Parity

    题目传送门 /* 题意:求最少改变多少个0成1,使得每一个元素四周的和为偶数 状态压缩+枚举:枚举第一行的所有可能(1<<n),下一行完全能够由上一行递推出来,b数组保存该位置需要填什么 ...