工厂模式
提供了一种创建对象的方法,隐藏创建过程,使用同一个接口指向新对象
需要一辆汽车,可以直接在工厂提货,不需要管是怎么创建的,以及汽车里面的具体实现
例子:汽车工厂,专门生产品牌汽车,传入宝马,生产宝马汽车,传入奔驰,生产奔驰汽车。
继承这个工厂的生成汽车接口,宝马工厂和奔驰工厂继承,分别生产对应品牌汽车,不再由参数决定
优点:创建对象只要知道名称就可以,拓展性高,想增加产品只需要拓展一个工厂类,隐藏具体实现,调用者只关心产品的接口
缺点:每次增加产品,都需要增加一个具体类和对象实现工厂,增加了系统的复杂度
抽象工厂模式
工厂不仅生产汽车,还生产飞机
宝马品牌继承,可以生产宝马汽车和宝马飞机
奔驰品牌继承,可以生产奔驰汽车和奔驰飞机
单例模式
保证一个类只有一个实例,并提供全局访问点
分为懒汉式和饿汉式,懒汉式:用到的时候创建,饿汉式:程序开始就创建,常用懒汉式
例子:一个班只有一个班主任,产品的唯一序列号
优点:减少内存开销,避免资源多重占用
缺点:没有接口不能继承 与单一原则冲突
原型模式
复制现有的实例生成新实例,创建当前对象的克隆,创建对象的代价比较大时使用
分为浅克隆和深克隆,浅克隆:基本数据类型和变量会新创建,引用指向不变,深克隆:指向也会新创建
例子:每周写的工作周报,大同小异
优点:性能提高,逃避构造函数的约束
缺点:需要对类的功能全局考虑
建造者模式
使用多个简单的对象构建一个复杂的对象,将一个复杂的构建与其表示分离
例子:肯德基有薯条、汉堡、可乐、炸鸡是不变的,组合方式是变的,去肯德基点餐属于建造订单过程,点餐顺序无关,点什么没有要求,可以单点,可以点套餐,最后一定要确认订单。
优点:建造者独立,易拓展,便于控制细节风险
缺点:产品必须共同点,范围有限,内部变化复杂,会有很多建造类
与工厂模式区别更加关注与零件装配的顺序