java中的设计模式(单例模式,工厂设计模式)

单例模式 一个类只允许产生一个对象

//1.饿汉式
class ClassA{
	private static final ClassA ca = new ClassA();
	private ClassA(){}
	private static ClassA getInstance(){
		return ca;
	}
}
//2.懒汉式
class ClassB{
	private static ClassB cb = null;
	private ClassB(){}
	public static synchronized ClassB getInstance(){
		if(cb == null) cb = new ClassB();
		return cb;
	}
}
class ClassC{
	private ClassC(){}
	private static class Inner{
		static ClassC cc = new ClassC();
	}
	public static ClassC getInstance(){
		return Inner.cc;
	}
}

开闭原则:对修改关闭,对扩展开放
工厂设计模式
版本1:定义一个方法,生产对象 -> 工厂

public static Animal createNewObject(){
	return new Cat();
}

版本2:由工厂根据参数的不同,创建不同的对象

public static Animal createNewObject(int i){
	if(i == 0)return new Cat();
	else if(i == 0) return new Dog();
	return null;
}

版本3:利用反射,根据类名让工厂创建对象

public static Animal createNewObject(String className){
	try{
		//通过反射创建对象
		Class c = Class.forName(className);
		Object o = c.newInstance();
		return(Animal)o;
	}catch (Exception e){
		e.printStackTrace();
		return null;	
	}
}

版本4:通过配置文件 读取className

public static Animal createNewObject(){
    BufferedReader br = null;
    try {
        //1. 创建字节输入流  配置文件的相对路径
        FileInputStream fis = new FileInputStream("file/config.xml");
        //2. 桥转换流
        InputStreamReader isr = new InputStreamReader(fis);
        //3. 缓冲流进行包装
        br = new BufferedReader(isr);

        String readLine = br.readLine();
        String[] strs = readLine.split("=");

        //4.通过反射创建对象
        Class c = Class.forName(strs[1]);
        Object o = c.newInstance();
        return (Animal)o;

    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }finally {
        if(br!=null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }	
        } 
    }
}

版本5:通过properties完成配置文件的读取

public static Animal createNewObject() throws Exception{
    //1. 创建字节输入流  配置文件的相对路径
    FileInputStream fis = new FileInputStream("file/config.xml");
    //读取配置文件的map集合
    Properties p = new Properties();
    //将流读取到的内容加载到 p集合中   =前是key  =后是value
    p.load(fis);
    String className = p.getProperty("className");
    fis.close();
    
    //通过反射  创建对象
    Class c = Class.forName(className);
    Object o = c.newInstance();
    return (Animal)o;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值