------- android培训、java培训、期待与您交流! ----------
单例模式
有这样一个类, 只提供对外获取对象的方法, 只能生成一个对象, 这样的类设计模式被称为单例模式
单例模式的两种实现方式
1. 懒汉式(延迟加载)
2. 饿汉式(非延迟加载)
实现代码
package homework;
public class SingleTest {
public static void main(String[] args) {
Single1 s1 = Single1.getInstance();
Single1 s2 = Single1.getInstance();
System.out.println(s1 == s2);
Single2 s3 = Single2.getInstance();
Single2 s4 = Single2.getInstance();
System.out.println(s3 == s4);
}
}
//非延迟加载
class Single1 {
//定义一个私有的静态的本类对象
private static Single1 instance = new Single1();
//定义私有的无参构造方法
private Single1 () {
}
//定义外部类获取实例的方法
public static Single1 getInstance() {
return instance;
}
}
//延迟加载
class Single2 {
//定义一个私有的静态的本类对象
private static Single2 instance;
//定义私有的无参构造方法
private Single2 () {
}
//定义外部类获取实例的方法
public static Single2 getInstance() {
if (instance == null) {
instance = new Single2();
}
return instance;
}
}
面向对象代码示例
工厂模式
工厂模式是设计一个工厂类, 利用多态的特性, 通过在创建对象的时候给构造方法传入一个参数来返回相应的数据
实现代码
import java.util.*;
class CarTest {
public static void main(String[] args) {
// 用工厂类获得相应ID的实例
Car c = CarFactory.getInstance(Bmw.BMWID);
// 运行获得的实例的方法
c.run();
}
}
// 定义一个工厂类识车的对象
class CarFactory {
public static Car getInstance(int id) {
// 定义Car对象
Car car = null;
switch (id) {
case Bmw.BMWID:
car = new Bmw();
break;
case Benz.BENZID:
car = new Benz();
break;
case Golf.GOLFID:
car = new Golf();
break;
}
return car;
}
}
// 创建以个车的基类
class Car {
// 定义一个公共的run方法
void run() {
System.out.println("Car run");
}
}
// 创建一个宝马的类
class Bmw extends Car {
public static final int BMWID = 1;
void run() {
System.out.println("Bwm run......");
}
}
// 创建一个奔驰的类
class Benz extends Car {
public static final int BENZID = 2;
void run() {
System.out.println("Benz run......");
}
}
// 创建一个高尔夫的类
class Golf extends Car {
public static final int GOLFID = 3;
void run() {
System.out.println("Golf run......");
}
}