单例模式
使用单例模式构建的类,在整个程序运行期间该类只存在一个实例对象。
实现方式
用 private 修饰类的构造方法,这样就不能在类的外部使用 new 关键字来创建实例对象。
在类的内部创建一个该类的对象,使用 private static 修饰。
提供一个外部能获取该类对象的静态方法。
1.饿汉模式
public class SingleLineDemo {
private SingleLineDemo() {
}
private static final SingleLineDemo SINGLELINE_DEMO = new SingleLineDemo();
public static SingleLineDemo getSingleLineDemoInstance() {
return SINGLELINE_DEMO;
}
}
2.懒汉模式
public class SingleLineDemo {
private SingleLineDemo() {
}
private static SingleLineDemo sLineDemo = null;
public static SingleLineDemo getSingleLineDemoInstance() {
// 存在线程安全问题
if (sLineDemo == null) {
sLineDemo = new SingleLineDemo();
}
return sLineDemo;
}
}
3.综合升级
public class SingleLineDemo {
private SingleLineDemo() {
}
private static SingleLineDemo sLineDemo = null;
public static SingleLineDemo getSingleLineDemoInstance() {
// 双重校验,解决线程安全,并效率相对较高
if (sLineDemo == null)
synchronized (sLineDemo) {
if (sLineDemo == null)
sLineDemo = new SingleLineDemo();
}
return sLineDemo;
}
}
工厂模式
工厂模式就是根据传入的标记,生产不同类的模式。
//接口定义公共规范
public interface IWidget {
void widget();
}
public class FirstProduct implements IWidget {
@Override
public void widget() {
System.out.println("产品1的组件");
}
}
public class SecondProduct implements IWidget {
@Override
public void widget() {
System.out.println("产品2的组件");
}
}
public static void main(String[] args) {
IWidget productWidget = getProductWidget(0);
productWidget.widget();
}
//工厂模式,根据标记生成相应的类
public static IWidget getProductWidget(int type) {
switch (type) {
case 0:
return new FirstProduct();
case 1:
return new SecondProduct();
}
return null;
}