一、单列模式:一个类只允许产生一个实例化对象;
Singleton是一个创建型模式,指某个类采用Singleton模式后,则这个类在创建之后,只会可能产生一个实例供外部访问,并且提供一个全局的访问点。
实现方式有懒汉式和饿汉式共四种:
1、饿汉式,线程安全 但效率比较低 :
public class SingletonTest {
private SingletonTest() {
}
private static final SingletonTest instance = new SingletonTest();
public static SingletonTest getInstancei() {
return instance;
}
}
2、懒汉式,非线程安全:
public class SingletonTest {
private SingletonTest() { //私有构造方法
}
private static SingletonTest instance; //声明变量
public static SingletonTest getInstance() { //提供对外方法
if (instance == null)
instance = new SingletonTest();
return instance;
}
}
3、懒汉式,线程安全,但是效率非常低:
public class SingletonTest {
private SingletonTest() { //私有构造方法
}
private static SingletonTest instance; //声明变量
public static synchronized SingletonTest getInstance() { //提供对外方法
if (instance == null)
instance = new SingletonTest();
return instance;
}
}
4、懒汉式,线程安全 并且效率高(常用):
public class SingletonTest{
//声明变量
public static Singleton instance;
//私有构造方法
private SingletonTest(){
}
//提供对外方法
public static SingletonTest getInstance(){
if (instance == null){
synchronized(SingletonTest.class){
if (instance == null){
instance = new SingletonTest();
}
}
}
return instance;
}
}
二、工厂设计模式
工厂方法模式:
- 工厂方法模式分为三种:普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
- 多个工厂方法模式,是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。
- 静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
1、普通工厂模式:
建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
interface Sender {
void Send();
}
class MailSender implements Sender {
@Override
public void Send() {
System.out.println("This is mail sender...");
}
}
class SmsSender implements Sender {
@Override
public void Send() {
System.out.println("This is sms sender...");
}
}
public class FactoryPattern {
public static void main(String[] args) {
Sender sender = produce("mail");
sender.Send();
}
public static Sender produce(String str) {
if ("mail".equals(str)) {
return new MailSender();
} else if ("sms".equals(str)) {
return new SmsSender();
} else {
System.out.println("输入错误...");
return null;
}
}
}
2、多个工厂方法模式:
该模式是对普通工厂模式的改进,在普通工厂模式中,如果传递的字符串出错,则不能正确的创建对象,而多个工厂模式是多个工厂方法,分别创建对象。
interface Sender {
void Send();
}
class MailSender implements Sender {
@Override
public void Send() {
System.out.println("This is mail sender...");
}
}
class SmsSender implements Sender {
@Override
public void Send() {
System.out.println("Thi