工厂模式,单列模式代码

工厂模式
代码如下:
产品类:
//抽象产品
abstract class BMW {
public BMW(){

}  

}
//具体产品
public class BMW320 extends BMW {
public BMW320() {
System.out.println(“制造–>BMW320”);
}
}
//具体产品
public class BMW523 extends BMW{
public BMW523(){
System.out.println(“制造–>BMW523”);
}
}
创建工厂类:
//现在的工厂是一个接口
interface FactoryBMW {
BMW createBMW();
}
//具体的工厂
public class FactoryBMW320 implements FactoryBMW{

@Override  
public BMW320 createBMW() {  

    return new BMW320();  
}  

}
public class FactoryBMW523 implements FactoryBMW {
@Override
public BMW523 createBMW() {

    return new BMW523();  
}  

}
客户类:
public class Customer {
public static void main(String[] args) {
FactoryBMW320 factoryBMW320 = new FactoryBMW320();
BMW320 bmw320 = factoryBMW320.createBMW();

    FactoryBMW523 factoryBMW523 = new FactoryBMW523();  
    BMW523 bmw523 = factoryBMW523.createBMW();  
}  

}
总结:
这种工厂方法,如果后期还有新的具体产品,只需要继承BMW这个类(抽象产品),然后定义新的工厂,
同样是实现FactoryBMW这个接口(工厂接口),生产具体的产品就ok了。这样就符合开闭原则,对扩展开发,修改关闭。
而简单工厂方法:如果后期有新的产品,产品同样可以继承BMW这个类(抽象产品),
但是,如果要得到这个具体的产品时,需要在原来工厂类中修改代码,添加一个新产品的方法,
这样就修改了原来的代码,这就不符合开闭原则了。

三种单例模式
懒汉式单例
package com.zl.server.sington;

public class Singletonl {
/**
* 懒汉式单例类,在第一次调用的时候实例化
*/
public Singletonl() {
// 注意这里没有final

}

private static Singletonl single;
// 只实例化一次
static {
	single = new Singletonl();
}

public synchronized static Singletonl getInstance() {
	if (single == null) {
		single = new Singletonl();
	}
	return single;
}

}

饿汉式单例
package com.zl.server.sington;
/**

  • 饿汉式单例
  • @author liumeng

*/
public class Singletone {
//私有的默认结构子
private Singletone() {
}//已经自行实例化
private static final Singletone single = new Singletone();//静态工厂方法
public static Singletone getInstance() {
return single;
}
}

双检锁/双重校验锁
package com.zl.server.sington;
/**

  • 双检锁/双重校验锁(DCL,即 double-checked locking(jdk1.5)

*/
public class Singleton {
private volatile static Singleton singleton;
private Singleton() {

}
public static Singleton getSingleton() {
if(singleton == null) {
synchronized (Singleton.class) {
if(singleton == null) {
singleton =new Singleton();
}
}
}
return singleton;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值