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

本文介绍了工厂模式和单例模式的实现方式。工厂模式通过创建一个统一接口来生成不同类别的对象,解决对象创建过程中的复杂性和灵活性问题;单例模式确保一个类只有一个实例,并提供一个全局访问点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值