单例模式
懒汉式与饿汉式
懒汉式顾名思义,在需要时才创建对象。而饿汉式在虚拟机启动时就会创建一个静态的对象。
懒汉式可能导致线程安全问题。饿汉式不会有线程安全问题,因为它只会创建一次。懒汉式在创建对象不加 synchronized
则会导致对对象的访问不是线程安全的。
工厂模式
汽车可以分为轿车、SUV、MPV等。
简单工厂
简单工厂由单一的工厂类来创建产品。
public class CarFactory {
public static Car getCar(String type) {
if ("Sedan".equalsIgnoreCase(type)) {
return new Sedan();
} else if ("SUV".equalsIgnoreCase(type)) {
return new SUV();
} else if ("MPV".equalsIgnoreCase(type)) {
return new MPV();
}
return null;
}
}
interface Car {
void drive();
}
class Sedan implements Car {
public void drive() {
System.out.println("Driving a Sedan");
}
}
class SUV implements Car {
public void drive() {
System.out.println("Driving an SUV");
}
}
class MPV implements Car {
public void drive() {
System.out.println("Driving an MPV");
}
}
工厂方法
每个产品都对应一个工厂。
public interface CarFactory {
Car createCar();
}
class SedanFactory implements CarFactory {
public Car createCar() {
return new Sedan();
}
}
class SUVFactory implements CarFactory {
public Car createCar() {
return new SUV();
}
}
class MPVFactory implements CarFactory {
public Car createCar() {
return new MPV();
}
}
// 同上面的Car,Sedan,SUV,MPV类
抽象工厂
每个工厂分别能够创建属于它自己品牌的一系列产品(例如不同类型的汽车)。
public interface CarFactory {
Sedan createSedan();
SUV createSUV();
MPV createMPV();
}
class MercedesFactory implements CarFactory {
public Sedan createSedan() {
return new MercedesSedan();
}
public SUV createSUV() {
return new MercedesSUV();
}
public MPV createMPV() {
return new MercedesMPV();
}
}
class BMWFactory implements CarFactory {
public Sedan createSedan() {
return new BMWSedan();
}
public SUV createSUV() {
return new BMWSUV();
}
public MPV createMPV() {
return new BMWMPV();
}
}
// Car, Sedan, SUV, MPV接口以及具体的Mercedes和BMW的实现类
抽象工厂模式比工厂方法模式的抽象程度更高,工厂方法侧重于单一产品的灵活性和扩展性,而抽象工厂侧重于产品族的整体性。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1216271933@qq.com