现在的位置: 首页 > 综合 > 正文

(HelloWorld教材版)简单工厂模式、单例模式

2014年01月07日 ⁄ 综合 ⁄ 共 1848字 ⁄ 字号 评论关闭

什么是设计模式人们在长期的软件开发中对一些经验的总结。是某些特定问题经过实践检验的特定的解决办法。

 

软件设计有一个原则就是封装变化点。将程序中经常变化的部分封装起来,可以降低类和类之间的耦合性。

 

 

 

简单工厂模式实现代码:

 public class Factory{

 

             public static Pizza CreatePizza(String type){

                            Pizza pizza=null;

                            switch(type){

                                      case "奶酪":

                                               pizza=new CheesePizza();

                                               break;

                                      case "培根":

                                               pizza=new BaconPizza();

                                               break;

                                      default:

                                               break;

                            }

                            return pizza;

             }



}

 

单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。

 单例模式有一下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。

 

 

 

 1.饿汉式单例类

 

//饿汉式单例类.在类初始化时,已经自行实例化 
  public class Singleton1 {
      //私有的默认构造子
       private Singleton1() {}
      //已经自行实例化 
      private static final Singleton1 single = new Singleton1();
      //静态工厂方法 
      public static Singleton1 getInstance() {
          return single;
     }

 

2.懒汉式单例类

//懒汉式单例类.在第一次调用的时候实例化 
  public class Singleton2 {
      //私有的默认构造子
      private Singleton2() {}
      //注意,这里没有final    
      private static Singleton2 single=null;
      //静态工厂方法 
      public synchronized  static Singleton2 getInstance() {
           if (single == null) {  
              single = new Singleton2();
          }  
         return single;
     }
 }

 

3.登记式单例类

 

import java.util.HashMap;
 2 import java.util.Map;
 3 //登记式单例类.
 4 //类似Spring里面的方法,将类名注册,下次从里面直接获取。
 5 public class Singleton3 {
 6     private static Map<String,Singleton3> map = new HashMap<String,Singleton3>();
 7     static{
 8         Singleton3 single = new Singleton3();
 9         map.put(single.getClass().getName(), single);
10     }
11     //保护的默认构造子
12     protected Singleton3(){}
13     //静态工厂方法,返还此类惟一的实例
14     public static Singleton3 getInstance(String name) {
15         if(name == null) {
16             name = Singleton3.class.getName();
17             System.out.println("name == null"+"--->name="+name);
18         }
19         if(map.get(name) == null) {
20             try {
21                 map.put(name, (Singleton3) Class.forName(name).newInstance());
22             } catch (InstantiationException e) {
23                 e.printStackTrace();
24             } catch (IllegalAccessException e) {
25                 e.printStackTrace();
26             } catch (ClassNotFoundException e) {
27                 e.printStackTrace();
28             }
29         }
30         return map.get(name);
31     }
32     //一个示意性的商业方法
33     public String about() {    
34         return "Hello, I am RegSingleton.";    
35     }    
36     public static void main(String[] args) {
37         Singleton3 single3 = Singleton3.getInstance(null);
38         System.out.println(single3.about());
39     }
40 }

 

 

【上篇】
【下篇】

抱歉!评论已关闭.