设计模式简单总结

7 篇文章 0 订阅
2 篇文章 0 订阅


一.状态模式:

1.在游戏开发过程中,涉及到复杂的状态切换时,可以运用到状态模式以及各式状态机来高效地完成任务。

2.有限状态机的实现方式,有两种可以选择:a.用枚举配合switch case语句;b.用多态与虚函数(也就是状态模式)。

3.状态模式的经典定义:允许对象在当内部状态改变时改变其行为,就好像此对象改变了自己的类一样。

4.对状态模式的理解:状态模式用来解决当控制一个对象状态转换的条件表达式过于复杂的情况,它把状态的判断逻辑转移到表示不同的一系列类当中,可以把复杂的逻辑判断简单化。

5.状态模式的实现分为三个要点:a.为状态定义一个接口;b.为每个状态定义一个类;c.恰当地进行状态委托。

6.通常来说,状态模式中状态对象的存放有两种实现存放的思路:a.静态状态,初始化时把所有可能的状态都new好,状态切换时通过赋值改变当前的状态;b.实例化状态,每次切换状态时动态new出新的状态。


二.工厂模式
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
工厂模式作为一种创建模式,一般在创建复杂对象时,考虑使用;在创建简单对象时,建议直接new完成一个实例对象的创建。

1.1、简单工厂模式
主要特点是需要在工厂类中做判断,从而创造相应的产品,当增加新产品时,需要修改工厂类。使用简单工厂模式,我们只需
要知道具体的产品型号就可以创建一个产品。
缺点:工厂类集中了所有产品类的创建逻辑,如果产品量较大,会使得工厂类变的非常臃肿。

1.2、工厂方法模式
定义一个创建对象的接口,其子类去具体实现这个接口以完成具体的创建工作。如果需要增加新的产品类,只需要扩展一个相
应的工厂类即可。
缺点:产品类数据较多时,需要实现大量的工厂类,这无疑增加了代码量。

1.3、抽象工厂模式
抽象工厂模式提供创建一系列相关或相互依赖对象的接口,而无需制定它们具体的类。
当存在多个产品系列,而客户端只使用一个系列的产品时,可以考虑使用抽象工厂模式。
缺点:当增加一个新系列的产品时,不仅需要实现具体的产品类,还需要增加一个新的创建接口,扩展相对困难。


三.策略模式


四.适配器模式


五.单例模式


六. 建造者模式
建造者模式:将复杂对象的构造和其表示分离,使得相同的构造过程可以产生不同的表示。

以下情形可以考虑使用建造者模式:
1.对象的创建复杂,但是其各个部分的子对象创建算法一定。
2.需求变化大,构造复杂对象的子对象经常变化,但将其组合在一起的算法相对复杂。

建造者模式的有点:
1.将对象的创建和表示分离,客户端不需要了解具体的构造细节。
2.增加新的产品对象时,只需要增加其具体的构造类即可,不需要修改原来的代码,扩展方便。

产品之间差异性大,内部变化较大、较复杂时不建议使用建造者模式。


七.装饰者模式
装饰模式:动态地给一个对象添加一些额外的功能,它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
新增加功能来说,装饰器模式比生产子类更加灵活。

以下情形考虑使用装饰者模式:
1.需要扩展一个类的功能,或给一个类添加附加职责。
2.需要动态的给一个对象添加功能,这些功能可以再动态的撤销。
3.需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。
4.当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的
子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。


八.

十五、备忘录模式
    备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在改对象之外保存这个状态。这样以后
就可以将该对象恢复到原来保存的状态。

    备忘录模式中需要定义的角色类:
    1.Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录
恢复内部状态。Originator可以根据需要决定Memento存储自己的哪些内部状态。
    2.Memento(备忘录):负责存储Originator对象的内部状态,并可以防止Originator以外的其他对象访问备忘
录。备忘录有两个接口:Caretaker只能看到备忘录的窄接口,它只能将备忘录传递给其他对象。Originator却可看
到备忘录的宽接口,允许它访问返回到先前状态所需要的所有数据。
    3.Caretaker(管理者):负责备忘录Memento,不能对Memento的内容进行访问或者操作。


十六、中介者模式
    中介者模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而使其耦合
松散,而且可以独立地改变他们之前的交互。
    
    如果对象与对象之前存在大量的关联关系,若一个对象改变,常常需要跟踪与之关联的对象,并作出相应的处理,
这样势必会造成系统变得复杂,遇到这种情形可以考虑使用中介者模式。当多个对象存在关联关系时,为它们设计一
个中介对象,当一个对象改变时,只需要通知它的中介对象,再由它的中介对象通知每个与它相关的对象。


十七、职责链模式
    职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之前的耦合关系,将这些对象连成
一条链,并沿着这条链传递请求,直到有一个对象处理它为止。

    职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无需关心请求的处理细节和请求的传递,
所有职责链将请求的发送者和请求者解耦了。


十八、观察者模式
    观察者模式:定义对象间的一种一对多的依赖关系,当一个对象状态发生改变时,所有依赖它的对象都得到通知并
自动更新。

    观察者模式从根本上讲必须包含两个角色:观察者和被观察者对象。
    1.被观察者对象自身应该包含一个容器来存放观察者对象,当被观察者自身发生改变时通知容器内所有的观察者对象
自动更新。
    2.观察者对象可以注册到被观察者中,完成注册后可以检测被观察者的变化,接收被观察者的通知。当然观察者也可
以被注销掉,停止对被观察者的监控。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值