天天看點

java設計模式---淺談2種工廠模式和單例模式

1、 工廠模式  。比如有一個統一接口  A   ,這個A接口是一個标準  。如果有類  B  和 C   那麼 BC必須實作A接口  。

我們在以往的 方法生成這種對象的時候   A  b=new  B() ;  A c=new C() ;這樣的方式來的 .但是如果不同的類需要不同的初始化的時候我們如果全部放在構造方法完成那麼

就嚴重破壞了 面向對象的概念 。   我們想要的就是一個工廠 Factory ,也就是一個代理  我們通過它的唯一接口來 産生不同類型的産品 。下面是一段代碼 :

1、一般的工廠

interface Product   //這裡接口隻是為了保證 傳回的對象可以 統一用 Product接受 

{

 void show() ;

}

class  ProductA  implements Product

 @Override

 public void show() {

  System.out.println("Product A!");

 }

class  ProductB   implements Product     

  System.out.println("Product B");

public class Factory     //作為工廠來使用

 public static Product getProduct(int product_index)

 {

  if(product_index==0)

   return new ProductA();

  if(1==product_index)

   return new ProductB() ;

  return null; 

 2、反射類型的工廠   ,看下面工廠方式 你有什麼感想呢?java web開發中經常用到

package me.test;

  System.out.println("Product B!");

 public static Product getProduct(String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException

  return (Product)Class.forName(className).newInstance() ;

 public static void main(String []args) throws InstantiationException, IllegalAccessException, ClassNotFoundException

  Product a=Factory.getProduct("me.test.ProductA") ;

  a.show() ;

  Product b=Factory.getProduct("me.test.ProductB") ;

  b.show() ;

  }

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                                        單例模式 Singleton    就是保證一個類隻有一個執行個體 。。2中方法

1、

class  One

 private One(){}

    private static One instance =null ;

 public synchronized static One getInstance()

 { 

  if(instance==null)

   instance=new One() ;

  return instance;

public class Singleton {

 public static void main(String[] args)

  Object obj1,obj2 ;

  obj1=One.getInstance() ;

  obj2=One.getInstance() ;

  System.out.println("(obj1==obk2)="+(obj1==obj2));  //結果為True證明執行個體唯一

2、方法2    相比第一種方法 這種方法不需要一次次判斷内置對象是否為空

    private static One instance =new One() ;

 public  static One getInstance()

  return instance ;