首页 / 设计模式 / 案例分析:设计模式与代码的结构特性
案例分析:设计模式与代码的结构特性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了案例分析:设计模式与代码的结构特性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2839字,纯文字阅读大概需要5分钟。
内容图文
![案例分析:设计模式与代码的结构特性](/upload/InfoBanner/zyjiaocheng/1095/84a99fcfb1ad4a1988561bc22e28c9a4.jpg)
软件设计模式分为三种类型:
- 创建型
- 结构型
- 行为型
本文以行为型中的模板方法模式(Template Method)为例,分析其代码结构特性
一、什么是模板模式方法?
?模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板模式方法由抽象类和具体类组成:
- 抽象类:
- 定义抽象的原语操作,具体子类将重定义它们来实现算法的步骤。
- 实现一个模板方法定义一个算法的构架。模板方法调用原语操作和抽象类或其他对象定义的操作。
- 具体类:实现原语操作来执行算法中子类特有的步骤。
模板方法模式中的方法可以分为两大类:模板方法和基本方法。
- 模板方法
?一个模板方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。
?一个抽象类可以有任意多个模板方法,而不限于一个。每一个模板方法都可以调用任意多个具体方法。
- 基本方法
?基本方法又可以分为三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)。
?抽象方法:由抽象模板角色声明,abstract修饰,具体模板角色实现。
?具体方法:一个具体方法由抽象类声明并实现,而子类并不实现或置换。
?钩子方法:由抽象模板角色声明并实现,具体模板角色可实现加以扩展。
二、模板模式UML图
三、分析其代码结构特性
- 引用关键代码(引用代码是为解释说明服务的,不要贴对解释问题无关的代码)解释该设计模式在该应用场景中的适用性;
/* 消息发送 */ public abstract class BaseMessageSender { /* 发送 */ public void send(String content) { validate(content); if (!execute(content)) { error(content); } } /*校验*/protectedabstractvoid validate(String content); /*判断发送是否成功*/protectedabstractboolean execute(String content); /*错误记录*/protectedabstractvoid error(String content); }
/* 短信 */ public class SmsSender extends BaseMessageSender { /* 校验消息*/ @Override protectedvoid validate(String content) { if (content == null || "".equals(content.trim()) || content.trim().length() != 11) { thrownew RuntimeException("手机号码不合法"); } } /*判断*/ @Override protectedboolean execute(String content) { Random random = new Random(); if (random.nextInt(10) % 2 == 0) { System.out.println("短信发送成功!"); returntrue; } else { returnfalse; } } /* 错误记录 */ @Override protectedvoid error(String content) { System.err.println("短信发送失败!手机号:" + content); } }
/* 邮件 */ publicclass EmailSender extends BaseMessageSender { /* 校验消息 */ @Override protectedvoid validate(String content) { if (content == null || "".equals(content.trim())) { thrownew RuntimeException("数据不能为空"); } } /* 判断*/ @Override protectedboolean execute(String content) { Random random = new Random(); if (random.nextInt(10) % 2 == 0) { System.out.println("邮件发送成功!"); returntrue; } else { returnfalse; } } /* 错误记录 */ @Override protectedvoid error(String content) { System.err.println("邮件发送失败!发送内容:" + content); } }
/* 模板模式,测试类 */ public class PatternTest { public static void main(String[] args) { /* 邮件发送 */ EmailSender emailSender = new EmailSender(); emailSender.send("测试内容"); /*短信发送 */ SmsSender smsSender = new SmsSender(); smsSender.send("12345678901"); } }
- 引入该设计模式后对系统架构和代码结构带来了哪些好处;
- 提高代码复用性
将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中 - 实现了反向控制
通过一个父类调用其子类的操作,通过对子类的具体实现扩展不同的行为,实现了反向控制,符合“开闭原则”。
- 解释其中用到的多态机制;
多态性是对象多种表现形式的体现。多态存在的三个必要条件是:继承,重写,父类引用指向子类对象。
本例定义了抽象类“BaseMessageSender”,”SmsSender"和“EmailSender"继承自抽象类,重写了抽象类的validate,execute,error三个方法。
- 说明模块抽象封装的方法;
通过对类的方法赋予指定的修改符”protected“来达到封装的目的,使得数据不被外部对象恶意的访问及方法不被错误调用导造成破坏对象的封装性。
- 分析各个模块的内聚度和模块之间的耦合度;
通过定义抽象类“BaseMessageSender”,将逻辑上相关的抽象放在一起,将抽象的消息发送和具体发送方式分离,降低耦合度。
原文:https://www.cnblogs.com/suseso/p/12006453.html
内容总结
以上是互联网集市为您收集整理的案例分析:设计模式与代码的结构特性全部内容,希望文章能够帮你解决案例分析:设计模式与代码的结构特性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。