【笨鸟先飞】Java重新学习日记21--设计模式之模板模式和状态模式简介

本文介绍了设计模式中的模板模式和状态模式,探讨了它们的应用场景和核心思想。模板模式提供了一个抽象的框架,允许子类在不改变整体结构的情况下扩展具体实现。状态模式则关注对象在不同状态下的行为差异,通过状态的切换来驱动对象的行为。文章通过实例分析了两种模式的异同,并指出在Android开发中可能的应用场景。
摘要由CSDN通过智能技术生成

设计模式是面向对象设计的精华,而面向对象终归于继承、封装和多态。我本次学习设计模式重在体会面向对象设计的思维方式,同时知晓该设计模式的应用场景,当后来遇到相似场景,可以直接借鉴该设计模式。

 

之前学习了策略模式,策略模式的核心是有一个父类的大概实现,以及继承自父类的具体算法实现。

 

就以继承为主的设计模式,有一个经典模式叫做模板模式。顾名思义,创建一个父类,让别人去写子类,在子类中写出他们真正想要的。

 

从表面看,他就是面向对象的一个最基础的东西,为何会成为一个专门的设计模式?

 

首先,其在系统架构中使用特别广泛,一些使用的手法,细节,以及对其的倡导足以支撑起作为一个设计类型

其次,设计必须用以继承实现的父类使用场景非常广泛。典型的就是android的各种组件,就是让你继承,就是让你改。

 

模板模式和策略模式共同点都是有一个父类。但是策略模式的父类主要是为了使用多态。而模板模式就是为了形成框架,不涉及多态问题。

 

模板模式,策略模式,以及状态模式,在实现方法上有很多交集。我们应该从其出发点的不同来体会。

 

状态模式,用类和对象来表征当前的事物所处的状态。在不同状态下,可以进行的操作不一样。即在不同状态下,同样的方法,其行为不一样。

 

状态模式来源于硬件开发的“状态机”模型。每个状态可以一些行为,当做完这些行为后,当前状态会继续处于当前状态,下一个状态,前一个状态等。

也就是设计的流程重点关注在状态的变化上。什么情况下从一个状态变化到另一个状态。

 

状态模式和策略模式,都使用了父类和多态,两者的创建过程几乎一模一样的。通过传入不同的子类,让相同的方法呈现不同的效果。

 

创建过程是,在父类下创建对特定方法实现由差异的子类,在客服端通过父类来调用子类的方法。

 

回忆策略模式,我们可以记得子类是重写的算法,将算法封装,以达到算法复用的目的,在使用时,在一个地方,我们往往只传入一种算法。应该说策略模式的初衷是封装算法,已达到当算法进行修改,增加的时候,调算法的客服端保持不变。

 

状态模式的初衷和子类的增加一点关系都没有。状态模式,是考虑有多种明确的状态,在客服端使用的时候,通过调用的不同的状态,并且在对应的方法中,切换状态,来达到对于状态机模型的各类软件的开发。

 

什么叫做状态机模型?

 

对于一个事物,1:他有多种情况的存在,2:这几种情况任意两两不能共存,且3:所有情况至少有一个必定存在,4:某种确定行为可以明确的导致一个状态往另一个状态的变化。

 

例如:

红绿灯:可以设为3种状态的状态机,分别是绿灯亮,红灯亮,黄灯亮。

 

售货机:可以设为4种状态,空置,投币,买东西,出货找零。

 

对于这两个模式,我的学习深度到此就结束了,似乎也没讲什么东西,如果我自我介绍,我是以androidjava。在APP开发中,尚未遇到过给我印象深刻的模板模式和状态模式的应用。

 

关于状态模式有一个简化的应用可以讲讲:数据选择。

 

数据选择是在一个场景需要进行选择,我们一般会使用一些变量来辅助选择其特征。

比如flagenumsharedpreferrence等。

 

由于在使用时,几种选择之间并不存在明确的自动的状态转变,虽然具备非此即彼的特征,但还不能用到状态模式。

 

另外由于工作年限以及工作目的,还没有编写过组件等架构类代码。

 

像工厂模式,使用很多,我足足用两篇文章才能学完一个模式。而这两个模式,体会不深,所以就用一篇文章写完,算是达到“知晓该设计模式的应用场景,当后来遇到相似场景,可以直接借鉴该设计模式”的目的。

 

以上,就是模板模式和状态模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值