设计模式——创建型(简单工厂、工厂方法、抽象工厂、建造者、原型、单例)

一、创建型
Car car=new Car();这种创建方式必须知道人的各种属性才能创建,不能解藕
能否把Car类抽象成一个接口,然后等用的时候,在去创建,但是接口不能直接去new,所以就诞生了简单工厂模式
0、简单工厂模式
SimpleCarFactory.createCar(String carName); 只需根据汽车名就能创建对应的汽车类
缺点:该工厂类如果想生产比如路虎的产品,则需要改生产类的原码,违反开闭原则
于是就用到了工厂方法模式,将工厂类抽象成一个接口,如果增加新的产品类,则通过工厂接口派生新的工厂生产新产品就可以了
1、工厂方法模式 (延迟到子类的一种创建模式)
抽象一个产品类,并抽象该产品的一些功能,可派生出多个产品类
抽象一个工厂类,并将该抽象产品注入,可派生出多个对应产品的工厂,每个工厂只能生产一种产品
扩展方式: 如果新增一个产品,只需实现工厂接口,创建自己开发的产品就可以了。
特点: 一个抽象产品类可以派生多个具体产品类。
一个抽象工厂类可以派生出多个具体工厂类。
一个具体工厂类只能生产一个产品类。
缺点:一个具体的工厂类只能生产一个产品类,如果某类产品的流水线都相同,是否可以让一个工厂同时生产呢?
例如:CAR可能细颗粒度划分,比如按车型分小型,MPV,CRV等产品簇。由于工厂方法模式,一个工厂只能生产一个产品类,
那么这里就用到了抽象工厂模式。据说最早是因WINDOWS和UNIX系统为了解决控件的兼容性,产生的这种设计模式
2、抽象工厂模式
抽象多个产品类,每个抽象产品类又可派生出多个具体产品类
抽象一个工厂类,派生多个具体工厂类,每个工厂类可按产品簇创建多个产品类
3、builder建造者模式
在要构建的类内部创建一个静态内部类 Builder
静态内部类的参数与构建类一致
构建类的构造参数是 静态内部类,使用静态内部类的变量一一赋值给构建类
静态内部类提供参数的 setter 方法,并且返回值是当前 Builder 对象
最终提供一个 build 方法构建一个构建类的对象,参数是当前 Builder 对象
场景:当参数过多时,可考虑使用builder方式,好处链表式赋值,代码更优雅,可读性更好。
如:new Car.Builder("宝马").setColor("红色").setType("CRV").build();
4、原型模式
浅拷贝:实现Cloneable接口,super.clone()可克隆自身包括参数创建新的对象,注意该方式为浅拷贝,如果是引用类型的,则拷贝的是引用地址
深拷贝:如想引用类型数据也要重新创建,可将对象序列化,并通过对象流方式复制创建
5、单例模式
类加载时创建:final静态成员变量创建对象,私有化构造参数防止new,静态方法获取该对象实例
非线程安全:在静态方法中判断对象为null时创建
线程安全: 可通过synchronized方式

猜你喜欢

转载自www.cnblogs.com/bao666/p/9075167.html
今日推荐