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

java设计模式---浅谈2种工厂模式和单例模式

2012-04-13 23:08 555 查看
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

{

@Override

public void show() {

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;

interface Product //这里接口只是为了保证 返回的对象可以 统一用 Product接受

{

void show() ;

}

class ProductA implements Product

{

@Override

public void show() {

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

}

}

class ProductB implements Product

{

@Override

public void show() {

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

}

}

public class Factory //作为工厂来使用

{

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 相比第一种方法 这种方法不需要一次次判断内置对象是否为空

class One

{

private One(){}

private static One instance =new One() ;

public static One getInstance()

{

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证明实例唯一

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: