1. 单例模式
  2. 工厂模式

单例模式

懒汉式与饿汉式

懒汉式顾名思义,在需要时才创建对象。而饿汉式在虚拟机启动时就会创建一个静态的对象。

懒汉式可能导致线程安全问题。饿汉式不会有线程安全问题,因为它只会创建一次。懒汉式在创建对象不加 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

×

喜欢就点赞,疼爱就打赏