1、Open-Close原则的含义是一个软件实体 应当对扩展开放,对修改关闭
2、当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用( 创建型 )模式
3、要依赖于抽象,不要依赖于具体。即针对接口编程,不要针对实现编程,是( 依赖倒转原则 )的表述
4、单例模式中,两个基本要点( 构造函数私有,唯一实例 )和单子类自己提供单例
5、“不要和陌生人说话” 是( 迪米特:一个对象应对其他对象尽可能少的了解 )原则的通俗表述
6、对象适配器模式是( 合成聚合复用原则)原则的典型应用
7、静态工厂(就是简单工厂)的核心角色是(抽象产品)
8、面向对象的六条基本原则包括:开闭原则,里式代换原则,合成聚合原则以及(依赖倒转),(迪米特法则),(单一职责原则),(接口隔离原则)
9、门面(外观)模式是(迪米特)法则的典型运用
10、以下哪个模式是利用一个对象,快速地生成一批对象:原型(Prototype)模式
11、结构型模式中最体现扩展性的几种模式是:装饰(Decorator)模式
装饰模式用于动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。它是一种对象结构型模式。
12、封装分布于多个类之间的行为的模式是:访问者(Visitor)模式
访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。
13ACD
14
15
16、抽象工厂和工厂方法的区别?
抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建 。当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、有效率。
17简述备忘录模式,请举出一个使用了备忘录模式的应用实例。
备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token。
实例:用户信息操作撤销
某系统提供了用户信息操作模块,用户可以修改自己的各项信息。为了使操作过程更加人性化,现使用备忘录模式对系统进行改进,使得用户在进行了错误操作之后可以恢复到操作之前的状态。
18
20.装饰模式与外观模式的区别:
外观模式中外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦合度。
装饰模式动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活。其别名也可以称为包装器(Wrapper),与适配器模式的别名相同,但它们适用于不同的场合。根据翻译的不同,装饰模式也有人称之为“油漆工模式”,它是一种对象结构型模式。
21.用例图
22.工厂模式结构图
23.设计模式六大基本原则
设计原则名称 | 设计原则简介 |
|
单一职责原则 (Single Responsibility Principle, SRP) | 类的职责要单一,不能将太多的职责放在一个类中 |
|
开闭原则 (Open-Closed Principle, OCP) | 软件实体对扩展是开放的,但对修改是关闭的,即在不修改一 个软件实体的基础上去扩展其功能 |
|
里氏代换原则 (Liskov Substitution Principle, LSP) | 在软件系统中,一个可以接受基类对象的地方必然可以接受一 个子类对象 |
|
依赖倒转原则 (Dependency Inversion Principle, DIP) | 要针对抽象层编程,而不要针对具体类编程 |
|
接口隔离原则 (Interface Segregation Principle, ISP) | 使用多个专门的接口来取代一个统一的接口 |
|
合成复用原则 (Composite Reuse Principle, CRP) | 在系统中应该尽量多使用组合和聚合关联关系,尽量少使用甚至不使用继承关系 |
|
迪米特法则 (Law of Demeter, LoD) | 一个软件实体对其他实体的引用越少越好,或者说如果两个类 不必彼此直接通信,那么这两个类就不应当发生直接的相互作 用,而是通过引入一个第三者发生间接交互 |
创建型模式:创建时都不需要关注创建的具体细节,只需要传递参数就可以了。
1简单工厂模式:简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须修改工厂类,加入必要的处理逻辑,这违背了“开闭原则”。
2工厂方法模式 :工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,也就是说工厂方法模式让实例化推迟到子类。主要解决了简单工厂模式的缺点。通过子类继承父类的方式,生成具体的工厂类,不违反开闭原则。
3抽象工厂模式 : 所谓抽象工厂模式就是她提供一个接口,用于创建相关或者依赖对象的家族,而不需要明确指定具体类。主要是多个工厂生产要生产多个产品。比如海尔和海信都同时生产电冰箱和空调。可以实现高内聚低耦合的设计目的。(缺点:难以增加新的产品种类)
4建造者模式:它主要是将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。就是把复杂的构造过程封装起来,创造对象的时候用户只需要调用就可以了。
5 原型模式: 原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过一个已有实例可以提高新实例的创建效率。可以动态增加或减少产品类。 原型模式提供了简化的创建结构。 可以使用深克隆的方式保存对象的状态。
6 单例模式(重点):确保某一个类只有一个实例,并且提供一个全局访问点。
结构型模式:描述如何将类或者对象结合在一起形成更大的结构
适配器模式(Adapter):所谓适配器模式就是将一个类的接口,转换成客户期望的另一个接口。它可以让原本两个不兼容的接口能够无缝完成对接。当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这个过程对客户类是透明的,客户类并不直接访问适配者类。
桥接模式(Bridge):桥接模式的主要优点是分离抽象接口及其实现部分,是比多继承方案更好的解决方法,桥接模式还提高了系统的可扩充性,将继承关系转化成关联关系,封装了变化,完成了解耦,减少了系统中类的数量,也减少了代码量。其主要缺点是增加系统的理解与设计难度,且识别出系统中两个独立变化的维度并不是一件容易的事情。
组合模式(Composite):
优点:1可以清楚地定义分层次的复杂对象,表示对象的全部或部分层次,使得增加新构件也更容易。2客户端调用简单,客户端可以一致的使用组合结构或其中单个对象。3定义了包含叶子对象和容器对象的类层次结构,叶子对象可以被组合成更复杂的容器对象,而这个容器对象又可以被组合,这样不断递归下去,可以形成复杂的树形结构。叶子对象和组合对象实现相同的接口
装饰模式(Decorator):
装饰模式包含四个角色:抽象构件定义了对象的接口,可以给这些对象动态增加职责(方法);具体构件定义了具体的构件对象,实现了在抽象构件中声明的方法,装饰器可以给它增加额外的职责(方法);抽象装饰类是抽象构件类的子类,用于给具体构件增加职责,但是具体职责在其子类中实现;具体装饰类是抽象装饰类的子类,负责向构件添加新的职责。
外观模式(Facade):外观模式提供了一个统一的接口,用来访问子系统中的一群接口。违背了“开闭原则”外观模式是对一系例的接口进行封装,而装饰者模式,是某样东西进行内容的附加,从而得到新的东西。
享元模式就是运行共享技术有效地支持大量细粒度对象的复用。
代理模式(Proxy):通过引入一个新的对象(如小图片和远程代理对象)来实现对真实对象的操作或者将新的对象作为真实对象的一个替身,这种实现机制即为代理模式,通过引入代理对象来间接访问一个对象,这就是代理模式的模式动机。
行为型模式:划分类与对象的职责,并研究系统在运行时实例对象之间的交互。
职责链模式(Chain of Responsibility):在将对象组成一条链,发送者将请求发给链的第一个接收者,并且沿着这条链传递,直到有一个对象来处理它或者直到最后也没有对象处理而留在链末尾端。
命令模式(Command):命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。同时命令模式支持可撤销的操作。命令模式可以对发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。这就是命令模式的模式动机。
解释器模式(Interpreter):如果在系统中某一特定类型的问题发生的频率很高,此时可以考虑将这些问题的实例表述为一个语言中的句子,因此可以构建一个解释器,该解释器通过解释这些句子来解决这些问题。(主要进行文法翻译,作用不大)
迭代器模式(Iterator):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示。缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性
中介者模式(Mediator): 用一个中介对象来封装一系列的对象交互,为了减少对象两两之间复杂的引用关系,使之成为一个松耦合的系统,我们需要使用中介者模式
备忘录模式(Memento): 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。除了原发器外,其他类是不能也不应该访问备忘录类的
观察者模式(Observer): 定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。
状态模式(State): 一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的 (stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。
策略模式(Strategy): 策略模式是对算法的封装,它把算法的责任和算法本身分割开,委派给不同的对象管理。策略模式通常把一个系列的算法封装到一系列的策略类里面
模板方法模式(Template Method): 定义了算法族,分别封装起来,让他们之前可以互相转换,此模式然该算法的变化独立于使用算法的客户。
访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。(注意与迭代器模式的区别)