八种常见的设计模式

  1. 单例模式

    饿汉式:唯一缺点: 不管用到与否 类装载的时候就完成初始化

将构造方法设置为私有,则在其他地方不能new实例对象,但是可以设置GetInstance()方法来返回唯一的实例

懒汉式:什么时候用到,什么时候在进行初始化  反射攻击

同样将构造方法私有化,在其他地方不能new 实例对象,但是在设置的GetInstance()方法中 先判断Instance 之前是否使用过(初始化过),如果使用过,直接返回原来的Instance 如果没有在初始化Instance

但是依然会存在问题:线程安全的问题

当两个线程并发访问的时候,第一个线程判断后sleep(),这时候第二个线程到达,判断并执行new 出实例 然后第一个线程返回这里继续执行,这样在两个线程内部是有两个不同的实例

解决:1. 双次判断 先判断 加锁后在判断一次

或者 2. 使用静态内部类 初始化实例,这样在第一次加载类的时候不会加载静态内部类,用到的时候在加载静态内部类。

完美模式 : 枚举单例模式 即可以解决线程同步,也可以解决反序列化

工厂模式:

   为什么要有工厂模式 1. 可以灵活控制生产过程  2. 可以控制对象权限 修饰,日志等。

指定任意的交通工具:

比如说飞机,火车,轮船 都有一个共同的方法

可以通过一个接口定义这个方法, 通过实现看接口重写方法,这样 在实例化的时候用 Moveable m = new具体对象

通过一个工厂类判断传入标志位,来返回具体对象

控制生产过程:

   把产生对象的过程不用new  交给工厂: 简单工厂:

   优点:工厂类有判断逻辑,自主觉决定生产哪一种对象,客户端无需知道具体产品类的类名,只需要知道具体产品类对应的参数即可

         实现责任分割,提供了专门的工厂类用于创建对象(这里可以对每一种对象单独开创一个工厂,用来实现生产流程的差异化控制)

   缺点:扩展困难,添加新产品不得不修改工厂逻辑    不符合开闭原则(在需求发生变化时,需要通过扩展代码来实现,而不是去修改源代码)

任意指定产品一族

   抽象工厂模式:

      创建一个父类为抽象工厂类,该类是为了生产具体的生产工厂类,可以看成两个简单工厂的结合。

第一个是为了生产具体的生产工厂(由抽象工厂类实现,多个具体工厂继承一个抽象工厂)

第二个是为了生产具体的对象(由抽象类或接口实现,多个对象继承一个接口)

    优点: 创建一个系列产品族的时候有优势,

当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点: 产品族(底层)的扩展非常困难。但是扩展产品工厂方便

抽象工厂模式 | 菜教程

装饰器模式:

     包装模式,指的是不改变原有对象的基础上,将功能附加到对象上,提供了比继承更有弹性的替代方案。

     核心: 可以透明的动态的扩展一个类的功能。

装饰器模式 | 菜鸟教程

模板模式:

     一个抽象类中将模板封装成非抽象类,调用的时候用继承它的子类对象调用,这样,所有继承它的子类都可以使用该模板方法。

     优点:1. 封装不变部分,扩展可变部分(在父类的抽象方法中)

     另外 2. 提取公共代码,便于维护 3. 行为由父类控制,由子类实现

     缺点: 每一个不同的实现都交给子类,导致类的个数增加。

模板模式 | 菜鸟教程

观察者模式:

   定义对象间的一种一对多的关系,当一个对象的状态发生改变的时候,则会自动通知依赖它的对象,观察者模式属于行为模式。

   首先要抽象出一个观察者的抽象类,在该类中有一个被观察者对象的的属性,在子类的构造方法中,调用该属性,加入观察者列表,然后具体的观察者类继承该类,获得观察者的身份。

另外一个类作为被观察的对象类, 当该类发生变化的时候,其他观察者都能得到消息。

所以在该类中一定有一个所有观察者对象的列表,还必须有唤醒所有观察者的update()方法,在该类发生变化时候调用,这样所有的观察者都能得到消

适配器模式:

   优点:1.可以让任何两个没有关联的类一起运行,2.提高了类的复用,3.增加了类的透明度,4.灵活性好

   缺点: 过多的使用适配器会让系统变得非常乱。

代理模式:

核心: 为其他对象提供一种代理以控制对这个对象的访问

    

优点:1.职责清晰  2. 可扩展性

注意事项:和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。2.和装配器模式的区别:装饰器模式士为了增强功能,而代理模式士为了加以控制。

代理模式 | 菜鸟教程

职责链模式:

   为请求创建了一个接受者对象的链,这种模式给与请求类型,对请求的发送者和接收者进行解耦,这种类型的设计模式属于行为模式。

   在这种模式中,每个接受者都包含对下一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者。

责任链模式 | 菜鸟教程

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值