`
jieke_ZJ
  • 浏览: 44800 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

常见设计模式

 
阅读更多

1. 写一个单例类。

答:单例模式主要作用是保证在 Java 应用程序中,一个类只有一个实例存在。下面给出两种不同形式的单例:

第一种形式:饿汉式单例

public class Singleton {  
    private Singleton(){}  
    private static Singleton instance = new Singleton();  
    public static Singleton getInstance(){  
        return instance;  
    }  
}  

第二种形式:懒汉式单例

public class Singleton {  
    private static Singleton instance = null;  
    private Singleton() {}  
    public static synchronized Singleton getInstance(){  
        if (instance==null) instance=newSingleton();  
        return instance;  
    }  
}  

单例的特点:外界无法通过构造器来创建对象,该类必须提供一个静态方法向外界提供该类的唯一实例。

【补充】用 Java 进行服务器端编程时,使用单例模式的机会还是很多的,服务器上的资源都是很宝贵的,对于那些无状态的对象其实都可以单例化或者静态化(在内存中仅有唯一拷贝),如果使用了 Spring 这样的框架来进行对象托管,Spring 的 IoC 容器在默认情况下对所有托管对象都是进行了单例化处理的。

2. 说说你所熟悉或听说过的设计模式以及你对设计模式的看法。

答:在 GoF 的《Design Patterns: Elements of Reusable Object-Oriented Software》中给出了三类(创建型[对类的实例化过程的抽象化]、结构型[描述如何将类或对象结合在一起形成更大的结构]、行为型[对在不同的对象之间划分责任和算法的抽象化])共 23 种设计模式,包括:Abstract Factory(抽象工厂模式),Builder(建造者模式),Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式);Facade(门面模式),Adapter(适配器模式),Bridge(桥梁模式),Composite(合成模式),Decorator(装饰模式),Flyweight(享元模式),Proxy(代理模式);Command(命令模式),Interpreter(解释器模式),Visitor(访问者模式),Iterator(迭代子模式),Mediator(调停者模式),Memento(备忘录模式),Observer(观察者模式),State(状态模式),Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibility(责任链模式)。

所谓设计模式,就是一套被反复使用的代码设计经验的总结(情境中一个问题经过证实的一个解决方案)。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便的复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。

3. 你在开发中都用到了那些设计模式?用在什么场合?

答:面试被问到关于设计模式的知识时,可以拣最常用的作答,例如:

1)工厂模式:工厂类可以根据条件生成不同的子类实例,这些子类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作(多态方法)。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。

2)代理模式:给一个对象提供一个代理对象,并由代理对象控制原对象的引用。实际开发中,按照使用目的的不同,代理可以分为:远程代理、虚拟代理、保护代理、Cache 代理、防火墙代理、同步化代理、智能引用代理。

3)适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起使用的类能够一起工作。

4)模板方法模式:提供一个抽象类,将部分逻辑以具体方法或构造器的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法(多态实现),从而实现不同的业务逻辑。

除此之外,还可以讲讲上面提到的门面模式、桥梁模式、单例模式、装潢模式(Collections 工具类里面的 synchronizedXXX 方法把一个线程不安全的容器变成线程安全容器就是对装潢模式的应用,而 Java IO 里面的过滤流(有的翻译成处理流)也是应用装潢模式的经典例子)等,反正原则就是拣自己最熟悉的用得最多的作答,以免言多必失。

4. 编程题: 写一个Singleton出来

Singleton 模式主要作用是保证在 Java 应用程序中,一个类 Class 只有一个实例存在。 一般 Singleton 模式通常有几种种形式:

第一种形式: 定义一个类,它的构造函数为 private的,它有一个 static 的 private 的该类变量,在类初始化时实例话,通过一个 public 的 getInstance 方法获取对它的引用,继而调用其中的方法。

public class Singleton {
private Singleton(){}
   //在自己内部定义自己一个实例,是不是很奇怪?
   //注意这是private 只供内部调用
   private static Singleton instance = new Singleton();
   //这里提供了一个供外部访问本class的静态方法,可以直接访问  
   public static Singleton getInstance() {
     return instance;   
   } 
} 
第二种形式: 
public class Singleton { 
  private static Singleton instance = null;
  public static synchronized Singleton getInstance() {
  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
  //使用时生成实例,提高了效率!
  if (instance==null)
    instance=new Singleton();
return instance;   } 
} 

其他形式:

定义一个类,它的构造函数为 private 的,所有方法为 static 的。

一般认为第一种形式要更加安全些

分享到:
评论

相关推荐

    常见设计模式的解析和实现(C++)整理版

    常见设计模式的解析和实现(C++)整理版,整理挺全面

    常见设计模式的解析和实现(C++)

    常见设计模式的解析和实现(C++)常见设计模式的解析和实现(C++)常见设计模式的解析和实现(C++)常见设计模式的解析和实现(C++)

    常见设计模式的解析和实现(C++版)

    本资料“常见设计模式的解析和实现(C++版)”深入探讨了在C++环境中如何理解和应用这些模式。 首先,我们要了解设计模式的基本分类。设计模式分为三大类:创建型模式、结构型模式和行为型模式。创建型模式关注对象...

    C++常见设计模式的解析和实现+源码解析.rar

    常见设计模式的解析和实现(C++),真的很经典,我也在学 常见设计模式的解析和实现(C++)之一-Factory模式 常见设计模式的解析和实现(C++)之二-Abstract Factory模式 常见设计模式的解析和实现(C++)之三-Builder模式 ...

    常见设计模式举例说明

    常见设计模式举例说明 设计模式是软件开发中的一种解决方案,它可以帮助开发者更好地解决软件设计中的问题。这里,我们将对 9 种常见的设计模式进行详细的解释和举例说明。 创建型模式 创建型模式是将对象的创建...

    C++常见设计模式的解析和实现

    在软件开发领域,设计模式是经过时间和实践验证的解决方案,用于解决常见的编程问题。C++作为一门强大的面向对象编程语言,其丰富的特性和强大的功能使得设计模式的应用更加广泛。以下是对标题和描述中提到的一些...

    常见设计模式的解析和实现(含C++源码)

    本资源包含对常见设计模式的深入解析以及C++语言的实现代码,对于理解和应用设计模式有极大的帮助。 首先,我们来了解一下设计模式的基本分类。设计模式通常分为三类:创建型模式、结构型模式和行为型模式。 1. **...

    C#设计模式/常见设计模式的解析和实现(C++)/设计模式迷你手册.rar

    《常见设计模式的解析和实现(C++)》可能详细解释了C++中的设计模式实现,C++作为强类型、静态类型的面向对象语言,其模板元编程和运算符重载特性为实现某些模式提供了独特的方式。例如,C++的模板可以用于实现策略...

    20种常见设计模式的C++实现

    本资源"20种常见设计模式的C++实现"涵盖了一些最核心的设计模式,以下是这些模式的详细介绍: 1. **单例模式(Singleton)**:确保一个类只有一个实例,并提供一个全局访问点。在C++中,通常通过私有构造函数和静态...

    java开发的几种常见设计模式

    java开发的几种常见设计模式. 工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new...

    常见设计模式代码及类图

    本资源包“常见设计模式代码及类图”包含了多种常用的设计模式的实现和类图解析,以下是对这些模式的详细讲解: 1. 单例模式(Singleton):确保一个类只有一个实例,并提供全局访问点。在代码中,你可以看到如何...

    常见设计模式示例(C#实现)

    以下是对“常见设计模式示例(C#实现)”中涉及的一些主要设计模式的详细解释: 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。在C#中,可以使用`static`修饰符和私有构造函数来实现,或者利用...

    design-pattern(设计模式,包括创建型、结构型、行为型三大类共23种常见的设计模式和J2EE常见设计模式等).zip

    本压缩包"design-pattern(设计模式,包括创建型、结构型、行为型三大类共23种常见的设计模式和J2EE常见设计模式等).zip"提供了全面的设计模式学习资源,适用于初学者和有经验的开发者,帮助他们提升软件设计能力。...

    常见设计模式的解析和实现(C++、C#)

    总的来说,理解和掌握这些常见设计模式对于任何软件开发者来说都是至关重要的,无论是在C++还是C#的开发环境中,它们都能帮助我们编写出更优雅、更易于维护的代码。通过阅读和实践这些文档,开发者可以提升自己的...

    常见设计模式的解析和实现.rar

    这个压缩包文件"常见设计模式的解析和实现.rar"显然包含了关于设计模式的详细讲解和实例实现,旨在帮助开发者理解和应用这些模式。以下是设计模式的一些核心知识点: 1. **创建型模式**:这类模式主要涉及对象的...

    常见设计模式解析(带示例)

    本资源“常见设计模式解析(带示例)”包含了作者对于多种设计模式的深入理解和示例解释,主要以C++语言为实现背景。通过学习这些设计模式,开发者能够更好地理解和构建可维护、可扩展的代码。 首先,我们来看一下...

    常见设计模式图例(一图胜千言一图秒懂).zip

    在给定的压缩包文件“常见设计模式图例(一图胜千言一图秒懂)”中,包含了多个设计模式的可视化图例,帮助开发者直观理解这些模式的核心概念和应用。 1. **简单工厂模式**:这种模式是一种创建型设计模式,它提供一...

Global site tag (gtag.js) - Google Analytics