java 单例模式和工厂模式实例详解

时间:2022-07-01 01:32:26

单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例

私有的构造方法

指向自己实例的私有静态引用

以自己实例为返回值的静态的公有的方法

饿汉式单例

java" id="highlighter_689713">
?
1
2
3
4
5
6
7
public class Singleton {
  private static Singleton singleton = new Singleton();
  private Singleton(){}
  public static Singleton getInstance(){
    return singleton;
  }
}

懒汉式单例

?
1
2
3
4
5
6
7
8
9
10
public class Singleton {
  private static Singleton singleton;
  private Singleton(){}
  public static synchronized Singleton getInstance(){
    if(singleton==null){
      singleton = new Singleton();
    }
    return singleton;
  }
}<br>

工厂方法模式代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
interface IProduct {
   public void productMethod();
 }
 class Product implements IProduct {
   public void productMethod() {
     System.out.println("产品");
   }
 }
 interface IFactory {
   public IProduct createProduct();
 }
 class Factory implements IFactory {
   public IProduct createProduct() {
     return new Product();
   }
 }
 public class Client {
   public static void main(String[] args) {
     IFactory factory = new Factory();
     IProduct prodect = factory.createProduct();
     prodect.productMethod();
   }
 }

抽象工厂模式代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
interface IProduct1 {
  public void show();
}
interface IProduct2 {
  public void show();
}
class Product1 implements IProduct1 {
  public void show() {
    System.out.println("这是1型产品");
  }
}
class Product2 implements IProduct2 {
  public void show() {
    System.out.println("这是2型产品");
  }
}
interface IFactory {
  public IProduct1 createProduct1();
  public IProduct2 createProduct2();
}
class Factory implements IFactory{
  public IProduct1 createProduct1() {
    return new Product1();
  }
  public IProduct2 createProduct2() {
    return new Product2();
  }
}
public class Client {
  public static void main(String[] args){
    IFactory factory = new Factory();
    factory.createProduct1().show();
    factory.createProduct2().show();
  }
}

希望本文对各位朋友有所帮助

原文链接:http://blog.csdn.net/wuxiao5570/article/details/70154159