软考下午题——java

Java设计模式分为三大类:创建型模式、结构型模式和行为型模式。

创建型模式:抽象工厂模式、生成器/建造者模式、原型模式、工厂方法模式、单例模式。

结构型模式:享元模式、代理模式、装饰器模式、适配器模式、外观模式、桥接模式、组合模式。

行为型模式:解释器模式、策略模式、中介者模式、观察者模式、访问者模式、状态模式、责任链模式、迭代器模式、命令模式、模板方法模式、备忘录模式。

 

创建型∶抽生原工单

结构型∶享代装适外桥组

行为型∶解策中观访状

 

意图,类型(创建型...),结构功能,适用性(特点,适用场合)。

类图中的圆圈表示接口。

继承类∶private A a;(定义对象a,值为null);具有继承关系的子类可访问:protected A a;

测试类∶父 a = new 子()

抽象对象或接口不能实例化,要通过子类具体实现(父类)  xxx  =    new    具体对象(子类)      [编译看左边,运行看右边]

构造方法:1.构造方法的名称要和类名一致;2.构造方法不允许有返回值类型声明。

构造方法有参数时,实例化对象也必须带参数。

模块中的输出语句一定会被调用。

子类方法中可以通过super.父类方法()

 

1.创建型模式

 

(1)抽象工厂(Abstract Factory)

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

适用性:Abstract Factory模式适用于:一个系统要独立于它的产品的创建、组合和表示时。

一个系统要由多个产品系列中的一个来配置时。

当要强调一系列相关的产品对象的设计以便进行联合使用时。

当提供一个产品类库,只想显示它们的接口而不是实现时。

 

(2)生成器/建造者(Builder)

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

构造器(this.局部变量=局部变量)

适用场景(复杂对象构造) :

当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

当构造过程必须允许被构造的对象有不同的表示时。

Builder:抽象建造者,为创建一个Product对象各个部件指定抽象接口,把产品的生产过程分解为不同的步骤,从而使具体建造者在具体的建造步骤上具有更多弹性,从而创造出不同表示的产品。

ConcreteBuilder:具体建造者,实现Builder接口,构造和装配产品的各个部件定义并明确它所创建的表示,提供一个返回这个产品的接口。

Director:指挥者,构建一个使用Builder接口的对象。即对应本题waiter。

Product:产品角色,被构建的复杂对象,具体产品建造者,创建该产品的内部表示并定义它的装配过程。包含定义组成组件的类,包括将这些组件装配成最终产品的接口。

 

(3)原型模式(Prototype)

深/浅克隆

意图:用原型实例指定创造对象的种类,通过复制这些原型来创建新的对象。

this.局部变量=局部变量.对象()

适用性:Prototype模式适用于:

当一个系统应该独立于它的产品创建、构成和表示时。

当要实例化的类是在运行时刻指定时,例如,通过动态装载。

为了避免创建一个与产品类层次平行的工厂类层次时。

当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们,可能比每次用合适的状态手工实例化该类更方便一些。

 

(4)工厂模式(Factory)

意图∶定义一个用于创建对象的接口,让子类决定实例化哪个类,工厂方法模式(Abstract Method)是一个类的实例化延迟到其子类。

 

(5)单例模式(singleton)

意图:一个类只有一个实例,且该类能自行创建这个实例的一种模式。

 

2.结构型模式

(1)享元模式(Flyweight)

意图∶运用共享技术支持大量细粒度的对象。

 

(2)代理模式(proxy)

 

(3)装饰器(Decorator)

意图∶动态的给一个对象添加一些额外的职责。

适用性∶在不影响其他对象的情况下,以动态,透明的方式给单个对象添加职责。

处理那些可以撤消的职责。

 

(4)适配器(Adapter)

抽象父类的实例化,必须指定具体子类的实例对象。

意图∶将一个类的接口转换(转接头,如typec与安卓转接头)成客户希望的另一个接口。使原来由于接口不兼容而不能一起工作的类可以一起工作。

适用性∶想使用一个已经存在的类,而它的接口不符合要求。(适配器转换)

Client

Target<--Adapter -->Adaptee (转接)

继承类∶private A a;(定义对象a,值为null)

测试类∶父 a = new 子()

 

(5)外观(Facade)

Facade模式定义了一个高层接口,为子系统中的一组接口提供一个一致的界面,这个接口使得这一子系统更加容易使用。

适用于:需要为一个复杂子系统提供一个简单接口的情况。

 

(6)桥接模式(Bridge)

意图∶将抽象部分与其实现部分分离,使它们都可以独立地变化。

适用于∶不希望抽象与其实现部分之间有固定的判定关系。

 

(7)组合模式(Composite)

意图∶将对象以树形结构表示(...)为“部分-整体”的层次结构,Composite使得用户对单个对象和组合对象的使用具有一致性。

 

3.行为型模式

(1)观察者模式(observer)

意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

适用场合:

1、当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中以使它们可以各自独立的改变和复用。

2、当一个对象的改变需要同时改变其他对象,而不知道且体有多少对象有待改变时。

3、当一个对象必须通知其他对象,而它又不能假定其他对象是谁,即不希望这些对象是紧耦合的(松耦合)。

4、ui界面。

 

(2)策略模式(strategy )

定义了系列算法,并将每个算法封装起来,使它们可以相互替换。使算法独立于使用它们的客户而变化。

适用于需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其他方式来实现。

 

(3)中介者模式(Mediator)

用一个中介对象来封装一系列的对象交互。中介者使对象不需要显示的相互引用,使其耦合松散,可以独立的改变它们之间的交互。

适应于下列情况:

       一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。

       一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。

       想定制一个分布在多个类中的行为,而又不想生成太多的子类。             

(4)状态模式(State)

允许一个对象在其内部状态改变时,改变它的行为。对象看起来似乎修改了它的类。

context∶上下文状态

 

(5)访问者模式(Visitor)

表示一个作用于某对象结构中各个元素的操作。它允许在不改变各元素类的前提下定义作用这些元素的新操作。

 

(6)责任链(Chain of Responsibility)

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

适用于∶有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定的情况。想在不明确指定接收者的情况下向多个对象中的一个提交一个请求。可处理一个请求的对象集合应被动态指定。             

(......)

 

 

 

 

 

你可能感兴趣的:(软件设计师,java,开发语言)