您的位置:首页 > 编程语言 > Java开发

几种常用的Java设计模式

2015-01-20 20:57 501 查看

1.单例模式。

什么是单例模式,为什么要使用单例模式?

单例模式是指在整个程序的生命周期中保证内存中某个类只有一个实例。

在软件开发的过程中,我们都会用到一些实用类,这些类与业务逻辑无关专门提供一些公共的功能供别人调用,为了减少内存占用。

单例模式demo

在不考虑非大并发的情况下书写如下。

public class Singleton {  

  

    private static Singleton sSingleton;  

  

    private Singleton() {  

    }  

  

    public static Singleton getInstance() {  

        if (sSingleton == null) {  

            sSingleton = new Singleton();  // line
10

        }  

  

        return sSingleton;  

    }  

  

}  

如果程序并发交大,会有两个线程同时执行到第10行,内存中会存在两个Singleton实例这违背了单例模式的原则。可参考如下两种写法:
a.double-check(DCL)

public class Singleton {  

  

    private volatile static Singleton sSingleton;  

  

    private Singleton() {  

    }  

  

    public static Singleton getInstance() {  

        if (sSingleton == null) { 

            synchronized (Singleton.class) {   

                if (sSingleton == null)  

                sSingleton = new Singleton();  

            }  

        }  

  

        return sSingleton;  

    }  

  

}  

b.静态内部类

public class Singleton  

{  

    private Singleton(){  

    }  

  

    private static class InstanceHolder{  

        private static final Singleton instance = new Singleton();  

    }  

  

    public static Singleton getInstance(){  

        return InstanceHolder.instance;  

    }  

  

}

2.工厂模式。

什么是工厂模式,为什么要使用工厂模式

将对象的创建统一起来,便于控制和代码的后期维护。能够避免代码中出现大量的new关键字。后期需要改构造函数时非常方便。

工厂模式有三种实现方式:简单工厂、工厂方法和抽象工厂

a.简单工厂 

interface Person
{  

    void eat();  

}  

  

class Man implements Person {  

  

    @Override  

    public void eat() {  

        System.out.println("Man eat");  

    }  

  

}  

  

class Woman implements Person {  

  

    @Override  

    public void eat() {  

        System.out.println("Woman eat");  

    }  

  

}  

  

class PersonFactory {  

    public static Person creator(String personType) {  

        if (personType.equals("Man")) {  

            return new Man();  

        } else if (personType.equals("Woman")) {  

            return new Woman();  

        } else {  

            throw new UnsupportedOperationException("Not
have this type person :" + personType  );
 

        }  

    }  

}  

  

public class A {  

    public static void main(String args[]) {  

        Person man = PersonFactory.creator("Man");  

        man.eat();  

        Person woman = PersonFactory.creator("Woman");  

        woman.eat();  

    }  

}

b.工厂方法

定义一个用于创建对象的接口,让子类决定将哪一个类实例化。

3.适配器模式。

解决原本由于接口或类不兼容而不能一起工作的类可以一起工作。

4.抽象工厂模式。

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 设计模式 常用