首先来介绍一下两个被问的最多的设计模式
1.工厂方法模式:
凡是出现了大量的商品需要创建并且这些商品实现了共同的接口时,考试使用工厂方法模式。
简单工厂模式:
我们以发邮件和发短信为例,首先创建一个sender接口,然后创建它的两个实现类mailSender和smsSender,最后再创建工厂类。
简单工厂模式
多个工厂方法模式:
多个工厂方法模式与简单工厂方法模式的区别在于,如果在简单工厂方法模式中传递的参数有误则不能正确创建对象,而多个工厂方法模式提供多个工厂方法分别创建对象。我们将上面的代码修改一下sendFactory
多个工厂方法模式
静态工厂方法模式:
静态工厂方法模式就是将工厂中的方法设为静态的,不需要创建实例,直接调用即可
抽象工厂方法模式:
在普通工厂方法模式中有一个问题,就是如果要扩展程序就要对工厂类进行修改,为了解决这个问题,就需要用到抽象工厂模式,要对功能进行扩展只需要添加工厂类即可而不是对工厂类进行修改。
抽象工厂方法模式
2.单例模式:
单例模式的特点:
- 单例类只有一个实例,构造函数是私有的
- 何时使用:当想控制实例数目节约系统资源的时候
- 使用场景:1.产生唯一的序列号,2.web中的计数器,不需要每次刷新都在数据库中加一次,可以先用单例缓存起来,3.创建一个对象需要消耗的资源过多,比如IO或者数据库操作
单例类的几种实现方式:
懒汉式
线程不安全,被调用的时候才初始化
懒汉式
线程安全的懒汉式:
加synchronized保证线程安全,但会影响效率。懒加载
线程安全的懒汉式
饿汉式
线程安全,不会发生懒加载
- 优点:没有加锁,效率高
-
缺点:类加载就初始化,浪费内存
饿汉式
双重锁校验:
这种方式采用双重锁方式来保证线程安全。懒加载
双重锁校验
枚举
枚举实现的单例模式是线程安全的,不会延迟初始化。
枚举
代理模式
假设C类要调用A类,但是A类不给C类直接调用,我们可以在A类与C类之间添加一个B类,A类和B类实现了共同的接口,接口的实现是在A类中,C类通过调用B类来实现对A类的调用
代理模式类图
外观模式
现在流行炒股,股民一般都手持好多个股票,而股民每天需要关注手中N个股票的动向,随时针对不同的股票作出不同的决策,这样感觉心好累;于是有的人选择买基金。基金本质上还是炒股票,只不过基金机构拿了投资人的钱买了N个股票,而我们只要购买一个基金就够了,对N个股票的管理就交给基金机构去折腾了
假设现在有多个子系统,如果客户端直接与这些子系统进行交互,客户端将会变的很复杂,这时候需要引入一个外观类负责与这些子系统进行交互,客户端只需要调用外观类的接口就可以了
装饰模式
运行的过程中,给一个对象动态地添加一些额外的行为。每一个具体的装饰类都为被装饰类添加一个功能
网友评论