创建型设计模式
更新: 2/16/2025 字数: 0 字 时长: 0 分钟
概括
所有的创建型设计模式都是希望通过一个类封装一个或多个类的创建(高服用),同时通过封装时的各种骚操作来实现不同的需求。
工厂模式/抽象工厂模式
意义
工厂模式起名为工厂,其本质是希望能够模仿像工厂一样,一个工厂可以生产出一类商品,客户只需要发出需求,然后工厂就能立刻返回用户所求
将对象的创建交给工厂进行处理,使业务层不再关心对象的创建过程,通过工厂拿到合适的对象之后即可使用。
个人理解
- 有些类的创建自始自终都是一样,这时我们大量的重复去写类似的代码就会导致我们的代码可重用度降低
- 对于一个接口,存在不同的实现,而不同的实现又有不同的创建方式,工厂模式希望将这些接口实现类的创建过程统一使用一个工厂类管理起来,进而创建某个接口的实例只需通过工厂类完成即可
在工厂模式的设计下,业务层只需要使用工厂类的某个参数就能够创建出想要的类。
而我们常说的抽象工厂模式,其实就是对工厂模式的一个拓展,我们原本的抽象工厂模式是一种一对一的形式,而抽象工厂模式进一步拓展至一个类可以生产多个高度相关的类
案例
- Hibernate 换数据库只需换方言和驱动就可以。
实践
工厂模式
java
Factory normalFactory= new NormalFactory();
Car normalCar=normalFactory.createCar(); //创建一个NormalCar(继承自Car类)下似
Factory specialFactory=new SpecialFactory();
Car specialFactory=specialFactory.createCar();
抽象工厂
java
Factory carFactory= new CarFactory();
Car benz=carFactory.createBenzCar(); //创建一个Benz类(继承自Car类)下似
Car bmw=carFactory.createBMWCar(); //可以看到这次我们的工厂创建出了两个不同的类
建筑者模式(Builder)
意义
相对工厂模式,建筑者模式更加关心对象的创建过程,建筑者模式创建的对象往往内部含有各种参数,这些参数需要外界传入(类似有参构造)。
我们可以看看建筑者和工厂的区别
java
CarBuilder builder =new CarBuilder();
Car benz=builder.buildBenzCar("engine","wheel");
Factory carFactory= new CarFactory();
Car benz=carFactory.createBenzCar();
我们在这里可以发现,建筑者模式其实更加关心了创造出的对象里面的参数情况。
原型模式
场景
在某些情况下,我们可能需要创建多个不同的类(即地址不同),但这些类的参数相同(指数值相同),这种情况下再大量的使用get,set,构造方法区手动的创建多个类是不优雅的,因此我们引入原型模式
案例
- BeanUtil的copyProperties方法
- Object类自带的clone方法
单例模式
有的类我们不需要创建多次,全局可以只使用一个,这时我们就可以使用享元模式
案例
- Spring Bean