当前位置:文档之家› JAVA设计模式之工厂模式(3种完整免费提供)

JAVA设计模式之工厂模式(3种完整免费提供)

JAVA设计模式之工厂模式(3种完整免费提供)
JAVA设计模式之工厂模式(3种完整免费提供)

JAVA设计模式之工厂模式

一、工厂模式的介绍

工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。

工厂模式的几种形态:

(1)简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory Method Pattern)。

(2)工厂方法(Factory Method)模式,又称多态性工厂(Polymorphic Factory)模式

或虚拟构造子(Virtual Constructor)模式;

(3)抽象工厂(Abstract Factory)模式,又称工具箱(Kit 或Toolkit)模式。

二、简单工厂模式

2.1简单工厂模式介绍

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据自变量的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

2.2简单工厂模式角色

(1)工厂类(Creator)角色:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体Java 类实现。

(2)抽象产品(Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个Java 接口或者Java 抽象类实现。

(3)具体产品(Concrete Product)角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体Java 类实现。

2.3简单工厂模式的优缺点

简单工厂模式的优点如下:

(1)工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。(2)客户端无需知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。

(3)通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

简单工厂模式的缺点如下:

(1)由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

(2)使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。

(3)系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。

(3)简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

2.4简单工厂模式的适用环境

(1)工厂类负责创建的对象比较少:由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂;

(2)客户端只知道传入工厂类的参数,对于如何创建对象不关心:客户端既不需要关心创建细节,甚至连类名都不需要记住,只需要知道类型所对应的参数。

2.5简单工厂模式的举例

例:

//抽象产品角色

public interface Car{

public void drive();

}

//具体产品角色

public class Benz implements Car{

public void drive() {

System.out.println("Driving Benz ");

}

}

public class Bmw implements Car{

public void drive() {

System.out.println("Driving Bmw ");

}

}

//工厂类角色

public class Driver{

//工厂方法.注意返回类型为抽象产品角色

public static Car driverCar(String s)throws Exception{ //判断逻辑,返回具体的产品角色给Client

if(s.equalsIgnoreCase("Benz"))

return new Benz();

else if(s.equalsIgnoreCase("Bmw"))

return new Bmw();

else throw new Exception();

}

}

三、工厂方法模式

3.1工厂方法模式的介绍

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

在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。这个核心类则摇身一变,成为了一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

3.2工厂方法模式角色

(1)抽象工厂(Creator)角色:担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创建对象的工厂类必须实现这个接口。在上面的系统中这个角色由Java 接口Creator 扮演;在实际的系统中,这个角色也常常使用抽象Java 类实现。

(2)具体工厂(Concrete Creator)角色:担任这个角色的是实现了抽象工厂接口的具体Java 类。具体工厂角色含有与应用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。在本系统中给出了两个这样的角色,也就是具体Java

类ConcreteCreator1 和ConcreteCreator2。

(3)抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在本系统中,这个角色由Java 接口Product 扮演;在实际的系统中,这个角色也常常使用抽象Java 类实现。(4)具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所声明的接口。工厂方法模式所创建的每一个对象都是某个具体产品角色的实例。

3.3工厂方法模式的优缺点

工厂方法模式的优点如下:

(1)在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节,用户只需要关心所需产品对应的工厂,无需关心创建细节,甚至无需知道具体产品类的类名。

(2)基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。它能够使工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部。工厂方法模式之所以又被称为多态工厂模式,正是因为所有的具体工厂类都具有同一抽象父类。

(3)使用工厂方法模式的另一个优点是在系统中加入新产品时,无需修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改其他的具体工厂和具体产品,而只要添加一个具体工厂和具体产品就可以了,这样,系统的可扩展性也就变得非常好,完全符合“开闭原则”。

工厂方法模式的缺点如下:

(1)在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具

体工厂类,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,有更多的类需要编译和运行,会给系统带来一些额外的开销。

(2)由于考虑到系统的可扩展性,需要引入抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度,且在实现时可能需要用到DOM、反射等技术,增加了系统的实现难度。

3.4工厂方法模式的适用环境

在以下情况下可以使用工厂方法模式:

(1)一个类不知道它所需要的对象的类:在工厂方法模式中,客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可,具体的产品对象由具体工厂类创建;客户端需要知道创建具体产品的工厂类。

(2)一个类通过其子类来指定创建哪个对象:在工厂方法模式中,对于抽象工厂类只需要提供一个创建产品的接口,而由其子类来确定具体要创建的对象,利用面向对象的多态性和里氏代换原则,在程序运行时,子类对象将覆盖父类对象,从而使得系统更容易扩展。

(3)将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无需关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中。

3.5工厂方法模式的举例

例:

//抽象产品

PenCore.java

public abstract class PenCore{

String color;

public abstract void writeWord(String s);

}

//具体产品

RedPenCore.java

public class RedPenCore extends PenCore {

RedPenCore() {

color = "红色";

}

public void writeWord(String s) {

System.out.println("写出" + color + "的字" + s);

}

}

BluePenCore.java

public class BluePenCore extends PenCore {

BluePenCore() {

color = "蓝色";

}

public void writeWord(String s) {

System.out.println("写出" + color + "的字" + s);

}

}

BlackPenCore.java

public class BlackPenCore extends PenCore {

BlackPenCore() {

color = "黑色";

}

public void writeWord(String s) {

System.out.println("写出" + color + "的字" + s);

}

}

//构造者

BallPen.java

public abstract class BallPen {

BallPen(){

System.out.println("生产一只装有"+getPenCore().color+"笔芯的圆珠笔");

}

public abstract PenCore getPenCore();

}

//具体构造者

RedBallPen.java

public class RedBallPen extends BallPen { public PenCore getPenCore() {

return new RedPenCore();

}

}

BlueBallPen.java

public class BlueBallPen extends BallPen { public PenCore getPenCore() {

return new BluePenCore();

}

}

BlackBallPen.java

public class BlackBallPen extends BallPen { public PenCore getPenCore() {

return new BlackPenCore();

}

}

四、抽象工厂模式

4.1抽象工厂模式的介绍

抽象工厂模式提供一个创建一系列或相互依赖的对象的接口,而无需指定它们具体的类。

4.2抽象工厂模式角色

抽象工厂模式涉及到的系统角色

(1)抽象工厂(AbstractFactory)角色:担任这个角色的是工厂方法模式的核心,它是与应用系统的商业逻辑无关的。通常使用Java 接口或者抽象Java 类实现,而所有的具体工厂类必须实现这个Java 接口或继承这个抽象Java 类。

(2)具体工厂类(Conrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。通常使用具体Java 类实现这个角色。

(3)抽象产品(Abstract Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。通常使用Java 接口或者抽象Java 类实现这一角色。

(4)具体产品(Concrete Product)角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。通常使用具体Java 类实现这个角色。

4.3抽象工厂模式的优缺点

优点:

(1)隔离了具体类的生成,使得用户不需要知道什么被创建了。

(2)当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。

缺点:

(1)添加新的产品对像时,难以扩展抽象工厂以便生产新种类的产品。

4.4抽象工厂模式的适用环境

(1)一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节。这对于所有形态的工厂模式都是重要的;

(2)一个系统的产品有多于一个的产品族,而系统只消费其中某一族的产品;(3)同属于同一个产品族的产品是在一起使用的,这一约束必须要在系统的设计中体现出来;

(4)系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。

4.5抽象工厂模式的举例

例:

//抽象产品

UpperClothes.java

public abstract class UpperClothes {

public abstract int getChestSize();

public abstract int getHeight();

public abstract String getName();

}

Trousers.java

public abstract class Trousers {

public abstract int getWaistSize();

public abstract int getHeight();

public abstract String getName();

}

//具体产品

WesternUpperClothes.java

public class WesternUpperClothes extends UpperClothes { private int chestSize;

private int height;

private String name;

WesternUpperClothes(String name,int chestSize,int height){ https://www.doczj.com/doc/a15620137.html,=name;

this.chestSize=chestSize;

this.height=height;

}

public int getChestSize() {

return chestSize;

}

public int getHeight() {

return height;

}

public String getName() {

return name;

}

}

CowboyUpperClothes.java

public class CowboyUpperClothes extends UpperClothes { private int chestSize;

private int height;

private String name;

CowboyUpperClothes(String name,int chestSize,int height){ https://www.doczj.com/doc/a15620137.html,=name;

this.chestSize=chestSize;

this.height=height;

}

public int getChestSize() {

return chestSize;

}

public int getHeight() {

return height;

}

public String getName () {

return name;

}

}

WesternTrousers.java

public class WesternTrousers extends Trousers {

private int waistSize;

private int height;

private String name;

WesternTrousers(String name,int waistSize,int height){ https://www.doczj.com/doc/a15620137.html,=name;

this.waistSize=waistSize;

this.height=height;

}

public int getHeight() {

return height;

}

public String getName() {

return name;

}

public int getWaistSize() {

return waistSize;

}

}

CowboyTrousers.java

public class CowboyTrousers extends Trousers {

private int waistSize;

private int height;

private String name;

CowboyTrousers(String name,int waistSize,int height){ https://www.doczj.com/doc/a15620137.html,=name;

this.waistSize=waistSize;

this.height=height;

}

public int getHeight() {

return height;

}

public String getName() {

return name;

}

public int getWaistSize() {

return waistSize;

}

}

//抽象工厂

ClothesFactory.java

public abstract class ClothesFactory {

public abstract UpperClothes createUpperClothes(int chestSize,int height);

public abstract Trousers createTrousers(int waistSize,int height);

}

//具体工厂

BeijingClothesFactory.java

public class BeijingClothesFactory extends ClothesFactory {

public Trousers createTrousers(int waistSize, int height) {

return new WesternTrousers("北京牌裤子",waistSize,height);

}

public UpperClothes createUpperClothes(int chestSize, int height) { return new WesternUpperClothes("北京牌上衣",chestSize,height);

}

}

ShanghaiClothesFactory.java

public class ShanghaiClothesFactory extends ClothesFactory {

public Trousers createTrousers(int waistSize, int height) {

return new WesternTrousers("上海牌裤子",waistSize,height);

}

public UpperClothes createUpperClothes(int chestSize, int height) { return new WesternUpperClothes("上海牌上衣",chestSize,height);

}

}

软件设计模式(JAVA)习题答案

软件设计模式(Java版)习题 第1章软件设计模式基础 1.1 软件设计模式概述 1.2 UML中的类图 1.3 面向对象的设计原则 一、名词解释 1.一个软件实体应当对扩展开放,对修改关闭,即在不修改源代码的基础上扩展 一个系统的行为。 2.一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 3.在软件中如果能够使用基类对象,那么一定能够使用其子类对象。 4.是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结, 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 二、单选择题 1.( A ) 2.( A ) 3. ( A ) 4. ( D ) 5. ( D ) 6.( A ) 7. ( D ) 8.( D ) 9.( D ) 10.( E ) 11.( C ) 12.( C ) 13. ( A ) 三、多选择题 1.( A、B、C、D ) 2. ( A、B ) 3.( A、D ) 4.( A、B、C、D ) 四、填空题 1.依赖倒转、迪米特法则、单一职责 2.模式名字、目的、问题、解决方案、效果、实例代码 3.超类、子类 4.开闭 5.用户 6.依赖倒转 7.组合/聚合 8.结构型、行为型 9.依赖倒转 10.开闭 11.需求收集是否正确、体系结构的构建是否合理、测试是否完全 12.人与人之间的交流 13.接口 14.名称、目的、解决方案 15.对象组合、类继承

16.对象组合 17.对象组合、类继承 18.抽象类的指针 五、简答题 1.答:设计模式按类型分为以下三类: 1)创建型设计模式:以灵活的方式创建对象集合,用于管理对象的创建。 2)结构型设计模式:将己有的代码集成到新的面向对象设计中,用于处理类或对象的组合。 3)行为型设计模式:用于描述对类或对象怎样交互和怎样分配职责。 2.答:设计模式的主要优点如下: 1)设计模式融合了众多专家的经验,并以一种标准的形式供广大开发人员所用,它提供了一套通用的设计词汇和一种通用的语言以方便开发人员之间沟通和交 流,使得设计方案更加通俗易懂。 2)设计模式使人们可以更加简单方便地复用成功的设计和体系结构,将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。设计模式使得重用成功的设计更加容易,并避免那些导致不可重用的设计方案。 3)设计模式使得设计方案更加灵活,且易于修改。 4)设计模式的使用将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本。 5)设计模式有助于初学者更深入地理解面向对象思想,一方面可以帮助初学者更加方便地阅读和学习现有类库与其他系统中的源代码,另一方面还可以提高软件的设计水平和代码质量。 3.答:设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效 果、实例代码和相关设计模式,其中的关键元素包括模式名称、问题、解决方案和效果。 4.答:正确使用设计模式具有以下优点: ⑴可以提高程序员的思维能力、编程能力和设计能力。 ⑵使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从 而缩短软件的开发周期。 ⑶使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。 5.答:根据类与类之间的耦合度从弱到强排列,UML中的类图有以下几种关系:依赖关 系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。

《JAVA设计模式》期末考试复习

《J A V A设计模式》复习资料 一、单项选择题 1.设计模式起源于() A、机械设计 B、建筑工程设计 C、水利工程设计 D、工业电力化设计 2.“不要和陌生人说话”是()原则的通俗表述。 A、接口隔离 B、里氏替换 C、依赖倒置 D、迪米特3.目前常见的设计模式主要有()种。 A、23 B、21 C、32 D、28 4.以下关于单一职责原则的叙述不正确的是()。 A、单一职责原则的英文名称是SingleResponsibilityPrinciple. B、单一职责原则要求一个类只有一个职责 C、单一职责原则有利于对象的稳定,降低类的复杂性 D、单一职责原则提高了类之间的耦合性 5.以下关于依赖倒置原则的叙述不正确的是() A、依赖倒置原则的简称是DIP B、高层模块不依赖于低层模块,低层模块依赖于高层模块 C、依赖倒置原则中高层模块和低层模块都依赖于抽象 D、依赖倒置原则实现模块间的松耦合 6.下面关于单例模式说法错误的是() A、单例模式是指一个类只有一个实例 B、单例类从实现方式上分为懒汉式和饿汉式 C、单例类从功能上分为状态单例类和无状态单例类 D、可以通过继承的方式对单例类进行扩展得到功能更丰富的单例类7.下面关于工厂方法模式说法错误的是()。 A、工厂方法模式使一个类是实例化延迟到其子类中 B、工厂方法模式中具有抽象工厂、具体工厂、抽象产品和具体产品4个角色 C、工厂方法模式可以处理多个产品的多个等级结构 D、工厂方法模式可以屏蔽产品类 8.在以下情况不适合使用责任职责链模式() A、有多个对象可以处理请求,哪个对象处理该请求在运行时刻自动确定。 B、在需要用比较通用和复杂的对象指针代替简单的指针的时候。 C、你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 D、一个请求需要一系列的处理工作。 9.当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用()模式 A、结构型 B、创建型 C、行为型 D、以上都可以 10.以下用来描述适配器模式的是()

9种java设计模式笔记

Java设计模式笔记 一.单例模式 1.单例模式(Singleton)表示一个类只能生成一个对象。 2.典型应用:Servlet就是使用的单例模式,不管多少个用户 访问一个Servlet都是访问的一个Servlet对象。 3.对于单例模式实现的想法: 1)首先明确生成一个类的对象时肯定要调用该类的构造方法。 2)那么我们必须要从构造方法入手解决一个类只能生成一个对象这一问题。 3)假设不提供构造方法,该类会默认是一个不带参数的构造方法,显然生成该类对象时还是会调用默认 的构造方法,还是无法解决问题 4)则我们肯定是要通过提供构造方法来解决这一问题,那么现在我们的问题是到底该提供怎样的构造 方法呢? 5)那么我们就想到一般的构造方法都是public的,在类的外部(其他类)可以调用该构造方法生成多个 对象,显然是不行的,那么我们就想到private关键 字,private表示只能类的内部才能访问。 6)那么现在我们想到可以把构造方法定义成一个私有(private)的,只有该类的内部才能访问,但是在类

的外面不能生成对象了,这样成为零例了,与单例很接近了。 7)那么我们需要在该类中提供一个返回唯一一个该类的对象供外部调用。但是现在我们构造方法外部都不能访问,没有对象该怎么访问这个类的指定方法呢? 8)那么我们想到把我们提供的方法定义成静态方法(非实例方法),就可以直接通过该类加点号访问该类的该方法了。 9)那么我们可以举一个单例的例子了: class Singleton{ private static Singleton singleton=new Singleton(); private Singleton(){ } public static Singleton getInstance(){ return singleton; } } 以上例子便是实现了单例模式,注意两个红色地方,静态的方法只能访问静态的属性。在类的外部直接通过类名加点号getInstance()访问唯一一个对象了。

设计模式考试复习题(含答案)

一、1. 设计模式一般用来解决什么样的问题: A.同一问题的不同表相 2. 下列属于面向对象基本原则的是: C.里氏代换 3. Open-Close原则的含义是一个软件实体:A.应当对扩展开放,对修改关闭. 4. 当我们想创建一个具体的对象而又不希望指定具体的类时,使用(A)模式。A.创建型 5. 要依赖于抽象不要依赖于具体。即针对接口编程不要针对实现编程:(D)依赖倒转原则 6. 依据设计模式思想,程序开发中应优先使用的是( A )关系实现复用。A, 委派 7. 设计模式的两大主题是( D ) D.系统复用与系统扩展 8. 单体模式中,两个基本要点(AB)和单体类自己提供单例A .构造函数私有 B.唯一实例 9. 下列模式中,属于行为模式的是( B ) B观察者 10. “不要和陌生人说话”是( D )原则的通俗表述 D.迪米特 1. 软件体系结构是指一个系统的有目的的设计和规划,这个设计规划既不描述活动,也不描述系统怎样开发,它只描述系统的组成元素及其相互的交互协作。 2.一个UML模型只描述了一个系统要做什么,它并没告诉我们系统是怎么做。 3.接口是可以在整个模型中反复使用的一组行为,是一个没有属性而只有方法的类。 4.多重性指的是,某个类有多个对象可以和另一个类的一对象关联。 5.当一个类的对象可以充当多种角色时,自身关联就可能发生。 6.在泛化关系中,子类可以替代父类。后前者出现的可以相同地方。反过来却不成立。 7.最通常的依赖关系是一个类操作的形构中用到了另一个类的定义。 8.组成是强类型的聚集,因为聚集中的每个部分体只能属于一个整体。 9.实现的符号和继承的符号有相似之处,两者的唯一差别是实现关系用虚线表示,继承关系用实线表示。 10. 设计模式中应优先使用对象组合而不是类继承。 1.适配器模式属于创建型模式结构型( F ) 2.在设计模式中,“效果”只是指“原因和结果”( T ) 3.设计模式使代码编制不能真正工程化( T ) 4.面向对象语言编程中的异常处理,可以理解为责任链模式(T ) 5.反模式就是反对在软件开发过程中使用设计模式分析:反模式用来解决问题的带有共性的不良方法(F ) 1.什么是设计模式?设计模式目标是什么? 答:设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解,保证代码可靠性。 2.设计模式中一般都遵循的原则有什么? 答:开闭原则、根据场景进行设计原则、优先组合原则、包容变化原则 3.“Gang of Four”针对“创建优秀面向对象设计”建议了哪些策略? 答:针对接口编程、优先使用对象组合而不是类继承,找到并封装变化点。 4.面向对象系统中功能复用的两种最常用技术是什么? 答:类继承和对象组合,类继承允许你根据其他类的实现来定义一个类的实现。父类的内部细节对子类可见。 类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便地改变被复用的实现。对象组合是类继承之外的另一种复用选择。新的更复杂的功能可以通过组装或组合对象来获得。对象组合要求被组合的对象具有良好定义的接口。 5.只根据抽象类中定义的接口来操纵对象有什么好处? 答:1) 客户无须知道他们使用对象的特定类型,只须对象有客户所期望的接口。 2) 客户无须知道他们使用的对象是用什么类来实现的,他们只须知道定义接口的抽象类。 五、应用题(分值15) 公司架构:经理、工程师、技师和后勤人员都是公司的雇员,经理管理工程师、技师和后勤人员。高层经理领导较低级别的经理。典型层次图如下:可以使用哪种设计模式实现公司的层级关系?并说明为什么? 组合模式,第一,其公司关系架构为树形结构;第二,其表示了部分-整体关系(自己扩展)

java常用设计模式-工厂模式的实现

?工厂模式细分有三种,分别为:简单工厂模式、工厂方法模式和抽象工厂模式。 (现单个的讲,最后再讲这三个的区别) ?这篇文章主要通过一个农场的实例来讲解,这也是java与模式书中的例子,只不过我对一些部分进行了简化,一些部分进行了扩充,以帮助理解例子如下: 有一个农场公司,专门向市场销售各类水果有如下水果: 葡萄(grape) 草莓(strawberry) 苹果(apple) /*-------------------------------1、简单工厂模式-----------------------------------------------*/ 这个比较简单,写一下源代码源代码中给出了必须的注释代码比书上的要 简单一些,排版也好看一些,只是为了让新手更好的理解 Fruit.java: /** *水果与其它植物相比有一些专门的属性,以便与农场的 * 其它植物区分开这里的水果假设它必须具备的方法: * 生长grow()收获harvest()种植plant() */ public interface Fruit { void grow(); void harvest(); ?voidplant(); } /*****************************下面是Apple类的函数Apple.java:*******************/ /** *苹果是水果类的一种,因此它必须实现水果接口的所有方法即 *grow()harvest()plant()三个函数另外,由于苹果是多年生植物, *所以多出一个treeAge性质,描述苹果的树龄 */ public class Apple implements Fruit { privateint treeAge; publicvoid grow(){ //苹果的生长函数代码} ?public void harvest(){//苹果的收获函数代码} ?public void plant() { //苹果的种植函数代码}

JAVA三种设计模式

一、单例模式 简介: 1.单例模式(Singleton Pattern)是Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 2.这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 特点: 1.单例类只能有一个实例。 2.单例类必须自己创建自己的唯一实例。 3.单例类必须给所有其他对象提供这一实例。 介绍: 1.意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 2.主要解决:一个全局使用的类频繁地创建与销毁。 3.何时使用:当您想控制实例数目,节省系统资源的时候。 4.如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。 5.关键代码:构造函数是私有的。 实现方法: 1.懒汉试,线程不安全:多用户同时调用时不能保证对象的唯一性。 2.懒汉式,线程安全:在调用得到对象方法时,加关键字:synchronized,实现调用对象时排队(加锁),缺点是效率低下。 3.饿汉式:线程安全,但是容易产生垃圾,浪费内存,因为加载类的同时创建了自身唯一对象。 4.双检锁/双重校验锁:多用户可以同时调用,调用if条件判断对象的唯一性,即有没有创建过的对象,如果有直接返回,若没有,用户新建,因为方法有static 修饰,所以,用户新建后,其他用户调用的对象可以保证是唯一的。 二、模板模式 简介: 1.单在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 2.意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 3.主要解决:一些方法通用,却在每一个子类都重新写了这一方法。 4.何时使用:有一些通用的方法。 5.如何解决:将这些通用算法抽象出来。 6.关键代码:在抽象类实现,其他步骤在子类实现。 7.优点:1、封装不变部分,扩展可变部分。2、提取公共代码,便于维护。3、行为由父类控制,子类实现。 8.缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。 9.使用场景:1、有多个子类共有的方法,且逻辑相同。2、重要的、复杂的方

java设计模式选择题复习

工厂系列模式的优缺点: 1.让用户的代码和某个特定类的子类的代码解耦 用户不必知道它所使用的对象是怎样创建的,只需知道该对象有哪些方法 2.抽象工厂模式可以为用户创建一系列相关的对象,使用户和创建这些对象的类脱耦 MVC模式是不是一种设计模式?为什么 MVC不是设计模式,应该是框架/架构模式,因为它的定义是抽象的,没有足够的细节描述使你直接去实现,而只能根据MVC的概念和思想,用几个设计模式组合实现。 举出一个生活中使用装饰者模式的例子,用程序实现思路 举个生活中的例子,俗话说“人在衣着马在鞍”,把这就话用装饰者模式的语境翻译一下,“人通过漂亮的衣服装饰后,男人变帅了,女人变漂亮了;”。对应上面的类图,这里人对应于ConcreteComponent,而漂亮衣服则对应于ConcreteDecorator; 设计模式如何分类,每一个类别都有什么特征? 设计模式分为3类,分别是:创建型模式、行为型模式、结构型模式。 创建型特点:避免用户直接使用new运算符创建对象。 行为型特点:怎样合理的设计对象之间的交互通信,以及怎样合理的为对象分配职 结构型特点:主要用于处理类或对象的组合 Java jdk中使用了哪些设计模式 1.单例 2.静态工厂 3.工厂方法 4.抽象工厂 5.构造者 6.原型 7.适配器8桥接9.组 合10.装饰器11.外观12.享元14.代理15.迭代器16.观察者17.协调者18.模板

方法19.策略20.责任链21.命令22.空对象25.解释器 面向对象的设计原则有哪些? 开闭原则、面向抽象的原则(依赖倒转原则)、多用组合少用继承原则、高内聚-低耦合原则。 观察者模式的推拉有什么不同?使用场景 推,具体主题将变化后的数据全部交给具体观察者。场景:当具体主题认为具体观察者需要这些变换后的数据时,往往采用推数据方式; 拉,具体主题不将变化后的数据交给具体观察者,而是提供获得这些数据的方法。场景:当具体主题不知道具体观察者是否需要这些变换后的数据时,往往采用拉数据的方式。 策略模式和工厂模式有什么不同? 策略模式定义了一系列算法,将他们一个个封装,并且他们之间可以相互替换;工厂模式定义一个创建对象的接口,让子类决定实例化哪一个类 5观察者模式的推拉有什么不同?适用场景 现在要说的分歧在这里: “推”的方式是指,Subject维护一份观察者的列表,每当有更新发生,Subject会把更新消息主动推送到各个Observer去。 “拉”的方式是指,各个Observer维护各自所关心的Subject列表,自行决定在合适的时间去Subject获取相应的更新数据。 “推”的好处包括:

《JAVA设计模式》期末考试复习资料

《JAVA设计模式》复习资料 一、单项选择题 1.设计模式起源于() A、机械设计 B、建筑工程设计 C、水利工程设计 D、工业电力化设计 2.“不要和陌生人说话”是()原则的通俗表述。 A、接口隔离 B、里氏替换 C、依赖倒置 D、迪米特 3.目前常见的设计模式主要有()种。 A、23 B、21 C、32 D、28 4.以下关于单一职责原则的叙述不正确的是()。 A、单一职责原则的英文名称是Single Responsibility Principle. B、单一职责原则要求一个类只有一个职责 C、单一职责原则有利于对象的稳定,降低类的复杂性 D、单一职责原则提高了类之间的耦合性 5.以下关于依赖倒置原则的叙述不正确的是() A、依赖倒置原则的简称是DIP B、高层模块不依赖于低层模块,低层模块依赖于高层模块 C、依赖倒置原则中高层模块和低层模块都依赖于抽象 D、依赖倒置原则实现模块间的松耦合 6.下面关于单例模式说法错误的是() A、单例模式是指一个类只有一个实例 B、单例类从实现方式上分为懒汉式和饿汉式 C、单例类从功能上分为状态单例类和无状态单例类 D、可以通过继承的方式对单例类进行扩展得到功能更丰富的单例类 7.下面关于工厂方法模式说法错误的是()。 A、工厂方法模式使一个类是实例化延迟到其子类中 B、工厂方法模式中具有抽象工厂、具体工厂、抽象产品和具体产品4个角色 C、工厂方法模式可以处理多个产品的多个等级结构 D、工厂方法模式可以屏蔽产品类 8.在以下情况不适合使用责任职责链模式() A、有多个对象可以处理请求,哪个对象处理该请求在运行时刻自动确定。 B、在需要用比较通用和复杂的对象指针代替简单的指针的时候。 C、你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 D、一个请求需要一系列的处理工作。 9.当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用()模式 A、结构型 B、创建型 C、行为型 D、以上都可以 10.以下用来描述适配器模式的是() A、表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 B、定义一个用于创建对象的接口,让子类决定实例化哪一个类。

java各个设计模式代码实现总结

第一章静态工厂设计模式 默认的包,只是包内共享。Protected的是包内和子类供共享。 1、要生产的产品,要设计成接口 (1)public interface IMusicBox { public void playBox(); } (2)public class PinBox implements IMusicBox { public void playBox() { System.out.println("钢琴曲"); } } (3)public class VolinBox implements IMusicBox { public void playBox() { System.out.println("小提琴@"); } } 2、工厂的代码 public class MusicBoxFactory { public static IMusicBox createIMusicBox(String name) { IMusicBox imusic = null; try { imusic= (IMusicBox) Class.forName(name).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return imusic; } } 3、测试的类 public class Demo { public void palyMusic(IMusicBox iMusicBox){ iMusicBox.playBox(); } public static void main(String[] args) { Demo d = new Demo(); d.palyMusic(MusicBoxFactory.createIMusicBox("PinBox"));

Java开发设计模式

0、简单工厂模式 简单工厂模式模式分为三种: 01、普通 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: [java]view plaincopy 1.public interface Sender { 2.public void Send(); 3.} 其次,创建实现类: [java]view plaincopy 1.public class MailSender implements Sender { 2.@Override 3.public void Send() { 4. System.out.println("this is mailsender!"); 5. } 6.} [java]view plaincopy 1.public class SmsSender implements Sender { 2. 3.@Override 4.public void Send() { 5. System.out.println("this is sms sender!");

6. } 7.} 最后,建工厂类: [java]view plaincopy 1.public class SendFactory { 2. 3.public Sender produce(String type) { 4.if ("mail".equals(type)) { 5.return new MailSender(); 6. } else if ("sms".equals(type)) { 7.return new SmsSender(); 8. } else { 9. System.out.println("请输入正确的类型!"); 10.return null; 11. } 12. } 13.} 我们来测试下: 1.public class FactoryTest { 2. 3.public static void main(String[] args) { 4. SendFactory factory = new SendFactory(); 5. Sender sender = factory.produce("sms"); 6. sender.Send(); 7. } 8.} 输出:this is sms sender! 02、多个方法 是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。关系图:

JAVA二十三种设计模式

Java设计模式一共23种哦,赵寰分享必属经典O(∩_∩)O~,让我们一起在Java的海洋里翱翔吧(*^__^*)嘻嘻……貌似这句话有语病,矮油,无所谓了,回复看所有的设计模式吧 1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。 2、BUILDER—MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。(这一定比美军在伊拉克用的翻译机好卖) 建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。

3、FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。 工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。 4、PROTOTYPE—跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。(100块钱一份,你要不要) 原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。 [hide]5、SINGLETON—俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道“老公”,都是指的同一个人,那就是我(刚才做了个梦啦,哪有这么好的事) 单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。

java设计模式知识点总结

JAVA的基本语法:词法与句法数据类型常量与变量运算符表达式语句 数据类型,基本类型:数字整型实型浮点型字符布尔构造/引用类型数组类接口整型:字节短整数整数长整数 实型:浮点型单精度双精度 常量(程序执行过程中,值保持不变的量):整型常量实型常量字符型常量字符串常量运算符:算术运算符关系运算符逻辑运算符位运算符移位运算符条件运算符运算符优先级 表达式:(用运算符和括号将操作数连接起来求值的式子):操作数(常量、变量和函数) 算术表达式关系表达式逻辑表达式赋值表达式复合赋值运算类型转换 程序的流程控制:标准输出和输入命令行参数对话框输入和输出数学计算方法条件选择语句switch语句循环控制语句跳转语句 继承:面向对象编程技术的一块基石,它允许创建分等级层次的类 继承的实现:继承通过关键字extends声明。声明一个继承父类的类的通常形式如下:class subclass-name extends superclass-name { //类体} 接口是一种特殊的类,接口不能有任何具体的方法,必须全是抽象方法;在接口中也可以声明变量,但必须是常量类型。接口可以通过关键字interface定义。 Eclipse定义:Eclipse是一个集成开发环境,就其本身而言,Eclipse只是一个框架和一组服务,用于通过插件组件构建开发环境,Eclipse拥有一个标准的插件集,核心插件是:平台、开发工具箱和插件开发环境。Eclipse通过插件组件构建开发环境。 Eclipse的组成:Eclipse项目Eclipse工具项目Eclipse技术项目Eclipse Web工具平台项目Eclipse平台体系结构 Eclipse特点:免费,纯java语言编写,免安装,扩展性强 Eclipse3.2新特性:JDT组成,Eclipse编译器,编译 Eclipse 平台:是一个具有一组强大服务的框架,这些服务支持插件,比如JDT 和插件开发环境(PDE)。由几个主要的部分构成:平台运行库、工作区、工作台、团队支持和帮助Eclipse的工作台分为菜单栏、工具栏、透视图和状态栏,透视图由视图和编辑器组成,“编辑器”用于代码的编辑。“视图”是功能窗口。编辑器、视图、透视图是Eclipse中比较重要的元素。 Eclipse界面:包资源管理器”视图“大纲”视图“层次结构”视图“Java浏览”透视图区别:“透视图”是视图和编辑器组成的集合,视图和透视图是包含与被包含的关系。用视图和编辑器可以组成不同的透视图。视图的大小可以通过鼠标调整,也可以自由移动。Eclipse 可以自动记忆视图的改变。 JDT的基本操作两种创建方式(以项目做源容器;在项目内以源文件做源容器) JDT的相关视图:包资源管理视图导航器视图大纲视图任务视图问题视图控制台视图构造:是一个从现有资源派生新资源和更新现有资源的过程类型:增量式和完全增量式 包资源管理器视图功能:显示工作台中的java项目的java元素。如何使用:层次结构后提供“导航器”中显示特定的java视图的资源 J2ME:实质上是Java程序设计语言应用于移动设备软件开发的技术平台,适用于作为智能

设计模式Java版期末总结

第一章设计模式概念 1.设计模式 名词解释:一套被反复使用,多数人知晓,经过分类编目的优秀代码设计经验的总结。 作用:重用代码,使代码更易理解,保证代码的可靠性。 2.可复用面向对象软件系统一般划分为两大类:应用程序工具箱、框架。 3.设计模式贯彻的原理:面向接口编程,而不是面向实现。 目标原则:降低耦合,增强灵活性。 4.设计模式的要素 模式名称、问题、环境或初始环境、解决方案、效果、举例、末态环境、推理、其他有关模式、已知的应用。 5.常用的设计模式有23种。 按特点分为三类:创建型,结构型,行为型。 6.创建型模式 定义:用来创建对象的模式,抽象了实例化的过程,帮助一个系统独立于其 关联对象的创建、组合和表达方式。 功能:将系统所使用的具体类的信息封装起来;隐藏类的实例是如何被创建和组织的。 作用:封装创建逻辑,不仅仅是一个对象那么简单;封装创建逻辑变化,客户代码尽量不修改,或尽量少修改。 常见的创建型设计模式: 单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 7.结构型模式 定义:类和对象的结构,它采用继承机制来组合接口或实现,或者通过组 合一些对象实现新的功能。 常见的结构型设计模式有:

代理模式、装饰模式、适配器模式、组合模式、桥梁模式、外观模式、享元模式。 8.行为型模式 定义:关注的是对象的行为,用来解决对象之间的联系问题 常见的行为型设计模式有: 模板方法模式、命令模式、责任链模式、策略模式、迭代模式、中介者模式、 观察者模式、备忘录模式、访问者模式、状态模式、解释器模式 课后题: 1、设计模式起源于:建筑工程设计 2、下面不属于设计模式的要素的是:因素 3、目前有23中设计模式,分为3大类 4、设计模式分为创建型、结构型和行为型三大类型 第二章设计原则 1.单一职责原则() 名词解释:一个类,只有一个引起它变化的原因,应该只有一个职责。 优点: ①降低类的复杂性 ②提高类的可读性 ③提高代码的可维护性和复用性 ④降低因变更引起的风险。 作用:单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计是否优良,但“职责”和“变化原因”都是不可度量的。 2.里氏替换原则() 名词解释:所有引用基类的地方必须能透明地使用其子类对象,反之则不行。 优点: ①代码共享,减少创建类的工作量。

软件设计模式JAVA习题答案

软件设计模式(J a v a版)习题 第1章软件设计模式基础 软件设计模式概述 UML中的类图 面向对象的设计原则 一、名词解释 1.一个软件实体应当对扩展开放,对修改关闭,即在不修改源代码的基础上 扩展一个系统的行为。 2.一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 3.在软件中如果能够使用基类对象,那么一定能够使用其子类对象。 4.是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总 结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 二、单选择题 1.( A ) 2.( A ) 3. ( A ) 4. ( D ) 5. ( D ) 6.( A ) 7. ( D ) 8.( D ) 9.( D ) 10.( E ) 11.( C ) 12.( C ) 13. ( A ) 三、多选择题 1.( A、B、C、D ) 2. ( A、B ) 3.( A、D ) 4.( A、B、C、D ) 四、填空题 1.依赖倒转、迪米特法则、单一职责 2.模式名字、目的、问题、解决方案、效果、实例代码 3.超类、子类 4.开闭 5.用户 6.依赖倒转 7.组合/聚合 8.结构型、行为型 9.依赖倒转 10.开闭 11.需求收集是否正确、体系结构的构建是否合理、测试是否完全 12.人与人之间的交流 13.接口 14.名称、目的、解决方案 15.对象组合、类继承 16.对象组合 17.对象组合、类继承 18.抽象类的指针

五、简答题 1.答:设计模式按类型分为以下三类: 1)创建型设计模式:以灵活的方式创建对象集合,用于管理对象的创建。 2)结构型设计模式:将己有的代码集成到新的面向对象设计中,用于处理类或对象的组合。 3)行为型设计模式:用于描述对类或对象怎样交互和怎样分配职责。 2.答:设计模式的主要优点如下: 1)设计模式融合了众多专家的经验,并以一种标准的形式供广大开发人员所用,它提供了一套通用的设计词汇和一种通用的语言以方便开发人员之间 沟通和交流,使得设计方案更加通俗易懂。 2)设计模式使人们可以更加简单方便地复用成功的设计和体系结构,将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。 设计模式使得重用成功的设计更加容易,并避免那些导致不可重用的设计方案。 3)设计模式使得设计方案更加灵活,且易于修改。 4)设计模式的使用将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本。 5)设计模式有助于初学者更深入地理解面向对象思想,一方面可以帮助初学者更加方便地阅读和学习现有类库与其他系统中的源代码,另一方面还可 以提高软件的设计水平和代码质量。 3.答:设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效果、实例代码和相关设计模式,其中的关键元素包括模式名称、问题、解决方案 和效果。 4.答:正确使用设计模式具有以下优点: ⑴可以提高程序员的思维能力、编程能力和设计能力。 ⑵使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高, 从而缩短软件的开发周期。 ⑶使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。 5.答:根据类与类之间的耦合度从弱到强排列,UML中的类图有以下几种关系: 依赖关系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化 和实现的耦合度相等,它们是最强的。 6.答:1)开闭原则(OCP):它要求软件实体应当对扩展开放,对修改关闭; 2)里氏替换原则(LSP):它要求继承必须确保超类所拥有的性质在子类中仍然成立; 3)依赖倒置原则(DIP):它要求软件设计要面向接口编程,不要面向实现编程; 4)单一职责原则(SRP):它要求对象不应该承担太多职责,一个类应该有且仅有一个引起它变化的原因; 5)接口隔离原则(ISP):它要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法; 6)迪米特法则(LoD):它要求如果两个软件实体无须直接通信,就不应当直接相互调用,而通过第三方转发该调用; 7)合成复用原则(CRP):它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。 第2章创建型模式(上)

《JAVA设计模式》期末试题 (A卷)

2010级《JAVA设计模式》期末试题 (模拟考卷) 一、选择题(15题×2分=30分) 1、设计模式一般用来解决什么样的问题________ A.同一问题的不同表相B不同问题的同一表相 C.不同问题的不同表相 D.以上都不是 2、设计模式的两大主题是________ A.系统的维护与开发 B 对象组合与类的继承 C.系统架构与系统开发 D.系统复用与系统扩展 3、下列不属于设计模式的要素的是_________ A.模式名称 B 问题 C.因素 D.环境 4、Open-Close原则的含义是一个软件实体_______ A.应当对扩展开放,对修改关闭 B.应当对修改开放,对扩展关闭 C.应当对继承开放,对修改关闭 D.以上都不对 5、要依赖于抽象,不要依赖于具体。即针对接口编程,不要针对实现编程,是__________原则的表述 A.开-闭原则 B.接口隔离原则 C.里氏代换原则 D.依赖倒置原则 6、“不要和陌生人说话”是_________的通俗表述 A.接口隔离原则 B.里氏代换原则 C.依赖倒转原则 D.迪米特法则 7、以下关于创建型模式说法正确的是___________。 A.创建型模式关注的是对象的创建 B.创建型模式关注的是功能的实现 C.创建型模式关注的是组织类和对象的常用方法 D.创建型模式关注的是对象间的协作 8、下列模式中,属于行为模式的是_______ A.工厂模式B观察者C适配器D以上都是 9、不属于创建型模式的是________ A.工厂模式B策略模式 C建造者模式D原型模式 10、下面的类图表示的是哪个模式?________ A.抽象工厂模式 B.工厂方法模式 C.命令模式 D.责任链模式

几种常用的设计模式介绍

几种常用的设计模式介绍 1.设计模式的起源 最早提出“设计模式”概念的是建筑设计大师亚力山大Alexander。在1970年他的《建筑的永恒之道》里描述了投计模式的发现,因为它已经存在了千百年之久,而现代才被通过大量的研究而被发现。 在《建筑的永恒之道》里这样描述:模式是一条由三个部分组成的通用规则:它表示了一个特定环境、一类问题和一个解决方案之间的关系。每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计。 在他的另一本书《建筑模式语言》中提到了现在已经定义了253种模式。比如: 说明城市主要的结构:亚文化区的镶嵌、分散的工作点、城市的魅力、地方交通区 住宅团组:户型混合、公共性的程度、住宅团组、联排式住宅、丘状住宅、老人天地室内环境和室外环境、阴和阳总是一气呵成 针对住宅:夫妻的领域、儿童的领域、朝东的卧室、农家的厨房、私家的沿街露台、个人居室、起居空间的序列、多床卧室、浴室、大储藏室 针对办公室、车间和公共建筑物:灵活办公空间、共同进餐、共同小组、宾至如归、等候场所、小会议室、半私密办公室 尽管亚力山大的著作是针对建筑领域的,但他的观点实际上适用于所有的工程设计领域,其中也包括软件设计领域。“软件设计模式”,这个术语是在1990年代由Erich Gamma等人从建筑设计领域引入到计算机科学中来的。目前主要有23种。 2.软件设计模式的分类

2.1. 创建型 创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。创建型模式主要有简单工厂模式(并不是23种设计模式之一)、工厂方法、抽象工厂模式、单例模式、生成器模式和原型模式。 2.2. 结构型 用于帮助将多个对象组织成更大的结构。结构型模式主要有适配器模式adapter、桥接模式bridge、组合器模式component、装饰器模式decorator、门面模式、亨元模式flyweight和代理模式proxy。 2.3. 行为型 用于帮助系统间各对象的通信,以及如何控制复杂系统中流程。行为型模式主要有命令模式command、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式state、策略模式、模板模式和访问者模式。 3.常见设计模式介绍 3.1. 单例模式(singleton) 有些时候,允许自由创建某个类的实例没有意义,还可能造成系统性能下降。如果一个类始终只能创建一个实例,则这个类被称为单例类,这种模式就被称为单例模式。 一般建议单例模式的方法命名为:getInstance(),这个方法的返回类型肯定是单例类的类型了。getInstance方法可以有参数,这些参数可能是创建类实例所需要的参数,当然,大多数情况下是不需要的 publicclass Singleton { publicstaticvoid main(String[] args)

相关主题
文本预览
相关文档 最新文档