设计模式GOF23(类图关系一)

创建型模式:

单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式

结构型模式:

适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式

行为型模式:

模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式

单例模式

核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。

主要实现方式:

1.饿汉式(单例对象立即加载)

static变量会在装载类时初始化,此时不涉及多个线程访问该对象的问题,不会发生并发访问。线程安全,可以省略synchronized关键字。

2.懒汉式(单例对象延迟加载)

需加synchronized关键字,每次调用getInstance()方法都要同步。

3.静态内部类方式(也是懒加载)

外部类没有static属性,不会像饿汉式那样立即加载对象,只有真正调用getInstance(),才会加载静态内部类,线程安全。

进阶:防止反射和反序列化创建对象,需处理私有构造器和readResolve()方法。

工厂模式

实现了创建者和调用者的分离。

详细分类:简单工厂模式、工厂方法模式、抽象工厂模式

简单工厂模式

用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码)

工厂方法模式

用来生产同一等级结构中的固定产品。(支持增加任意产品)

为了避免简单工厂模式的缺点,不完全满足OCP(开闭原则)。

简单工厂模式只有一个工厂类,工厂方法模式有一组实现了相同接口的工厂类。

根据设计理论,建议使用工厂方法模式,实际上,一般使用简单工厂模式。

抽象工厂模式

用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

建造者模式

分离了对象子组件的单独构造(Builder负责)和装配(Director负责),适用于构造过程复杂的情况。不同的构造器、相同的装配,可做出不同的对象;相同的构造器、不同的装配顺序也可做出不同的对象,实现了构建算法和装配算法的解耦,更好的复用。往往可配合工厂模式一起使用。

原型模式

通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可使用原型模式。以某个对象为原型,复制出新的对象,效率高,避免了重新执行构造过程。new创建的对象属性是默认值,复制出的对象属性和原型对象完全相同,并且新对象改变不会影响原型对象。

实现:Cloneable接口(NSCopying协议)和clone方法(copy方法),注意深拷贝与浅拷贝(序列化与反序列化会深拷贝)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值