几种常用设计模式

最经典最常用,十大武器排行榜首位的设计模式 Yeah!!!!!
1、观察者模式:
        我们先来看一下定义 ,定义已经写得满分清楚明了。如果这还看不懂,请@我手把手教你读。
         定义:  一种一对多的依赖关系,让多个观察对象同时监听某一主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能自动更新自己。
         什么时候使用观察者模式?(如果小学、初中、高中,语文水平都不咋地,可选择不看)
        当一个对象改变需要同时改变其他对象时,而且不知道具体有多少对象需要改变,就应该考虑使用观察者模式。
----------------------------------------------------
 代码的实现思路:
      (1)在被观察者类(如老板)上,定义一个公有事件。
      (2)将所有观察者(如员工),所需要执行的方法,传递到这个事件里。
      (3)被观察者在该类上执行该事件。

        所谓的观察者模式,就是委托。
         什么是委托?
        委托就相当于:搞清洁阿姨的一个垃圾桶,任何人都可以往里面丢垃圾。所以,我们首先声明一委托,让所有对象都可以往里面添加方法。当阿姨去倒垃圾的时候,各个人的垃圾都会被倒掉。这就相当于委托的调用。
          什么是事件?
         以我的理解,委托和事件就是一个东西,只不过执行事件,不允许放在观察者身上。感觉事件就是为委托再封装一层。
          什么是抽象类?
         一个不完整的男人。抽象类就是一个不完整的类,它可以自己选择去实现某些方法,把代码的逻辑放在自己身上,哪些方法却只有声明,没有具体实现,这就叫做抽象方法。
--------------------------------------------------------
        最简单基础经典的观察者模式,猫叫
        主体对象:Cat   观察者对象:Mouse1,Mouse2,Mouse3 ........
        (1)首先,我们在Cat声明一个委托,或者是事件。(2)然后,各观察者Mouse1,Mouse2,Mouse3........可以往里面添加方法。(3)紧接着,当Cat执行到某个逻辑时,叫了一声,紧接着调用委托,则调用了观察者往里添加的所有方法。(4)相当于通知了所有的观察者,而Mouse们就可以执行相关的操作了。
         所谓的耦合和解耦
        我们可以定义一个抽象类,让所有的观察者都去继承这个类,并且去实现它,这叫耦合,也叫多态。观察者所实现的,往委托里添加的方法,基于自己的需求,都不一致,这叫解耦。
-----------------------------------------------------------



2、简单工厂模式 vs 工厂方法模式:
        惯例看一下定义,看不下去,就读一遍把。虽然都是废话。
         简单工厂定义:在工厂类中包含必要的逻辑判断,根据客户端的选择,来动态实例化相关的产品类。
        工厂方法定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。使一个类的实例化延迟到该子类。
-------------------------------------------------------------
         1、简单工厂:
 代码的实现思路:
     (1)一个工厂factory,可选择处理多个产品product。
     (2)一个抽象产品abstract product,多个具体产品product。
     (3)通过向工厂传递字符串,来实例化产品。

  举例:
         产品:产品A,产品B,产品C............        客户:客户端1                  工厂:工厂1
      (1) 产品ABC都会继承同一个抽象类,耦合。
      (2) 当客户端请求需要某种产品时,会实例化一工厂对象,并且告诉它需要什么产品。紧接着,工厂会判断客户端的需求,决定了需要生产哪个产品,并且去实例化它。
----------------------------------------------------------------
         2、工厂方法
  代码的实现思路:
       (1)一个抽象工厂abstract factory,多个具体工厂factory。
              但是抽象工厂处理的产品都是同种类型。
       (2)一个抽象产品abstract product,多个具体产品product。产品都是同种类型
              每个具体工厂生产相对应的具体产品。
       (3)直接实例化所需要的产品product的工厂Factory
    
  举例:
        产品:产品A,产品B,产品C............        客户:客户端1                 工厂:子工厂1,子工厂2,子工厂3..........
          (1)子工厂123实现同一个工厂接口,实现---创建什么产品---的方法。    
          (2)子工厂1生产 产品A,子工厂2生产 产品B,子工厂3生产 产品C.......。
          (3)当客户端需要某种产品时,它会直接找子工厂生产。
------------------------------------------------------------------
          为什么 使用 工厂设计模式
         因为客户端很懒,但是有钱任性,它不想自己手动去生产这个产品出来。
         (1)假设由客户端自己生产产品,生产前需要自己准备好某些工具、材料,才能开始生产。一旦,它想生产另外一种产品时,它又需要新的工具。而使用工厂模式,降低了客户端和产品对象之间的耦合。(2)所以把它交给了工厂来生产,不需要修改自身的逻辑代码。当我们需要产品时,都可以去找工厂来提取。
-------------------------------------------------------------------
          工厂方法的优缺点:当添加一种新的产品时,我们不需要更改工厂类的判断逻辑,只需要添加一个新的产品工厂类,但这同样也是缺点,增加了额外的开发量。

   工厂方法相对于简单工厂的区别:
       工厂方法通过直接实例化产品工厂factory来取得产品。
       简单工厂则是通过传递字符串来从工厂里获取产品。


3、抽象工厂模式:
         走一波定义,虽然难理解。
          定义:提供一个创建一系列相关或依赖对象的接口,而无需指定它们具体的类
          为什么使用抽象工厂:
         回想一下,上面的简单工厂以及工厂方法;简单工厂:把判断逻辑放在了工厂类之中,选择的产品是由客户端来输入的。而工厂方法:判断逻辑直接由客户端决定,但是额外的子工厂开发量却很大。
         假设,现在有一些固定的客户,他们所需要的就是对应一个固定的产品。抽象工厂的经营模式就是它只面向一种客户,生产一件产品,并且可以随时改变自己的经营模式。比如我现在做的是衣服的客户,我只生产衣服的产品;当走了这个客户时,来了一个新的鞋子客户,那么我就能转化为生产鞋子的工厂。
          抽象工厂最大的特点:就是能通过反射来确定,客户与产品。
         来点逼格高一点的话(建议语文不咋地,甭看了):抽象工厂的好处:
        1、初始化工厂在一个应用中只需要出现一次,这使得改变一个应用的具体工厂变得分厂容易。
        2、它让具体的创建实力过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂实现分离,不会出现在代码中。

         为了更好的理解请看代码!!!!!!

   抽象工厂相对于工厂方法的区别:
       
            抽象工厂是在工厂类上再抽象一次,可实现多个工厂种类,每个工厂处理不同类型的产品,而工厂方法只是一种类型工厂处理一种产品。
     












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值