java设计模式---浅谈2种工厂模式和单例模式
发布日期:2021-07-19 01:25:42 浏览次数:2 分类:技术文章

本文共 2496 字,大约阅读时间需要 8 分钟。

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

}

转载地址:https://blog.csdn.net/iteye_6481/article/details/82308713 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Jquery实现鼠标放在图片上面显示大图效果
下一篇:mysql建临时表

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年03月28日 07时23分53秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章