适配器模式(类适配器)


java设计模式大体分为23种设计模式,直接通过例子学习设计模式,更易于理解和思考其中的原理和作用,以下给出 适配器模式 的第一种(一个有三种)的demo,叫做类适配器模式:


MainRun.java类,是程序运行入口,含有main方法。大伙认真的看main方法上面的注释喔,是博主对此模式的总结和分析。(附 advantage是表示使用此模式的优势,disadvantage是此模式的不足和缺点,use scene是表示此模式的使用场景。)

package cn.cat.design.mode.adaptor.clazz;public class MainRun {/**适配器模式(类适配器):使得原本两个不相干的或不协调的类进行协调工作。类适配模式:通过继承类来得到适配器。* * advantage: 使得不协调的类进行协调配合工作。* 			  通过继承的方式,如果本身目标接口的方法在原实现类中有实现,则可以减少这些接口方法的实现,* 			 从而减少适配器模式的复杂性。* 			* disadvantage:因为需要继承原类,则导致适配器不能再继承其他任何的类,并且要求目标只能是接口,不能是抽象类。* * use scene:需要适配的目标是个接口,并且只需继承一个原类,而不是需要多个原类来凑合在一个适配器中。* * @param args*/public static void main(String[] args) {//美国籍客户Customer customerAme = new Customer("tomcat",21,2,CustomerType.AMERICAN);System.out.println("customerAme :" + customerAme.isValidInfo());System.out.println("-------------------------------------------------------------");//中国籍客户Customer customerChi = new Customer("中",21,2,CustomerType.CHINESE);System.out.println("customerChi :" + customerChi.isValidInfo());}}



Customer.java

package cn.cat.design.mode.adaptor.clazz;/**封装客户信息** @author Cat(gwj)* date 2015-9-3* time 下午4:56:40*/
public class Customer{/**姓名* */private String name;/**年龄* */private int age;/**vip等级* */private Integer vipGrade;/*** 客户类型s*/private CustomerType type;public Customer(String name, int age, Integer vipGrade, CustomerType type) {super();this.name = name;this.age = age;this.vipGrade = vipGrade;this.type = type;}public CustomerType getType() {return type;}public void setType(CustomerType type) {this.type = type;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Integer getVipGrade() {return vipGrade;}public void setVipGrade(Integer vipGrade) {this.vipGrade = vipGrade;}public boolean isValidInfo () {Validator validtor = getValidatorByType();return validtor.isValidData(name, age, vipGrade);}public Validator getValidatorByType () {Validator validator = null;switch (type) {case AMERICAN:validator = new AmericanValidator();break;case CHINESE://因为已经存在旧的校验类,通过适配器来使旧的校验类适配Validatorvalidator = new ChineseValidatorAdaptor();		break;case JAPANESE:throw new UnsupportedOperationException();default:throw new RuntimeException("未知的客户类型");}return validator;}}



CustomerType.java

package cn.cat.design.mode.adaptor.clazz;/**客户类型** @author Cat(gwj)*  date 2015-9-6*  time 下午6:10:56*/
public enum CustomerType {/*** 美国人*/AMERICAN,/*** 中国人*/CHINESE,/**日本人* */JAPANESE;
}




Validator.java

package cn.cat.design.mode.adaptor.clazz;/**客户信息校验器接口** @author Cat(gwj)*  date 2015-9-6*  time 下午6:06:08*/
public interface Validator {/**是否有效数据。* @param name 姓名* @param age 年龄* @param vipGrade 会员等级* @return*/public boolean isValidData (String name , int age , Integer vipGrade);
}



AmericanValidator.java

package cn.cat.design.mode.adaptor.clazz;/**美国籍信息校验** @author Cat(gwj)*  date 2015-9-6*  time 下午6:18:40*/
public class AmericanValidator implements Validator {@Overridepublic boolean isValidData(String name, int age, Integer vipGrade) {if (name == null || name.length() < 6) {System.out.println("name 不符合规范");return false;}if ( 0 >= age || age >= 100) {System.out.println("age 不符合规范");return false;}if (vipGrade == null || vipGrade < 1 || vipGrade > 5) {System.out.println("vipGrade 不符合规范");return false;}return true;}}



ChineseValidatorAdaptor.java

package cn.cat.design.mode.adaptor.clazz;public class ChineseValidatorAdaptor extends ChineseInfoJudge implements Validator{@Overridepublic boolean isValidData(String name, int age, Integer vipGrade) {//直接调用原始校验方法return isJudgePassed(name, age, vipGrade, false);}}




ChineseInfoJudge.java

package cn.cat.design.mode.adaptor.clazz;/**中国籍信息校验。* 假设此类是项目很早之前就已经存在的校验类,Validator接口是在项目后期在开始引入,故此类并没有实现Validator接口。** @author Cat(gwj)*  date 2015-9-6*  time 下午6:23:20*/
public class ChineseInfoJudge {/**是否校验通过* @param name 姓名* @param age	年龄* @param vipGrade	vip会员等级* @param isJudgeEmptyProperty 是否运行属性为空* @return*/public boolean isJudgePassed(String name, int age, Integer vipGrade , boolean isAllowEmptyProperty) {if (!isAllowEmptyProperty && (name == null || vipGrade == null )) {System.out.println("name or vipGrade 为空");return false;}if (name != null && (name.length() < 2 || name.length() > 5)) {System.out.println("name 不符合规范");return false;}if ( 10 >= age || age >= 120) {System.out.println("age 不符合规范");return false;}if (vipGrade != null && ( vipGrade < 1 || vipGrade > 6)) {System.out.println("vipGrade 不符合规范");return false;}return true;}}


------------------------------------------------------------demo end--------------------------------------------------------------

转载于:https://www.cnblogs.com/catgwj/p/7604867.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

空间连接时计算总和_学习CALCULATE函数(六)丨帕累托之累计求和

(写在前面的话&#xff1a;非常感谢韭菜大神和冬神的指点&#xff0c;万分感谢。)哎&#xff0c;说归说&#xff0c;还是需要继续学习CALCULATE函数&#xff0c;也是蛮无奈的。最近白茶在研究帕累托分析法&#xff0c;本期分享一下帕累托ABC分析法的基础——累计求和。这里简要…

揭秘仿人机器人背后的技术秘密 | 优必选研究院技术专家刘益彰【附PPT】

来源&#xff1a;机器人大讲堂机器人大讲堂直播间037期目前国际上主要有两种控制方式的仿人机器人&#xff1a;一种是基于位置控制的仿人机器人&#xff0c;另一种是基于力矩控制的仿人机器人。由于类人运动的功能的多样性、复杂性以及高维度性&#xff0c;所以仿人机器人的研究…

luoguP1463:反素数ant(打表心得☆)

题目描述对于任何正整数x&#xff0c;其约数的个数记作g(x)。例如g(1)1、g(6)4。如果某个正整数x满足&#xff1a;g(x)>g(i) 0<i<x&#xff0c;则称x为反质数。例如&#xff0c;整数1&#xff0c;2&#xff0c;4&#xff0c;6等都是反质数。现在给定一个数N&#xff0…

席南华院士:数学的意义

本文转自返朴公众号2020年5月30日&#xff0c;中国科学院院士、中国科学院数学与系统科学研究院研究员席南华受邀作远程报告“数学的意义”&#xff0c;从数学的发展史、数学的特性、数学巨匠的一些观点以及数学美的含义等多个角度讲述了数学的意义。本文为报告文字整理版&…

java简单小项目_Java简易抽奖系统小项目

本文实例为大家分享了Java简易抽奖系统的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下需求&#xff1a;实现一个抽奖系统1 注册2 登录3 抽奖必须先注册 再登陆 再抽奖随机产生4个随机数作为幸运卡号用户注册后 登录的时候 用户名密码输入判断只有三次机会需要做…

2017-9-26 NOIP模拟赛

NOIP 2017 全真模拟冲刺 ---LRH&&XXY 题目名称 那些年 铁路计划 毁灭 题目类型 传统 传统 传统 可执行文件名 years trainfare destroy 输入文件名 years.in trainfare.in d…

protobuf java any_protobuf3笔记

Protobuf3笔记文件后缀定义Proto的文件应以.proto为后缀。语法版本Proto文件的首行应指定语法版本&#xff1a;syntax "proto3"; // "proto2"定义字段在消息中&#xff0c;每个字段以下列方式定义&#xff1a;type filed "" tag ";"如…

108页报告一文看懂光刻机,看国产替代如何破局【附下载】

来源&#xff1a;方正证券光刻机是人类文明的智慧结晶&#xff0c;被誉为半导体工业皇冠上的明珠。光刻机作为前道工艺七大设备之首&#xff0c;价值含量极大&#xff0c;在制造设备投资额中单项占比高达23%&#xff0c;技术要求极高&#xff0c;涉及精密光学、精密运动、高精度…

【bzoj 3601】一个人的数论 (莫比乌斯反演+伯努利数)

题解&#xff1a; &#xff08;吐槽&#xff1a;网上题解那个不严谨猜测真是没谁了……关键是还猜得辣么准……&#xff09; 直接化简到求和那一段&#xff1a; $f_{d}(n)\sum_{t|n}\mu(t)t^{d}\sum_{i1}^{\frac{n}{t}}i^{d}$ $设S_{d}(T)\sum_{i1}^{T}i^{d}$ 那这个是什么呢&a…

院士论坛|李德仁:测绘遥感与智能驾驶

来源&#xff1a;测绘学报未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;云脑研究计划&#xff0c;构建互联网&#xff08;城市&#xff09;云脑技术和企业图谱…

ansible编译httpd playbook示例

以下是playbook的内容。它的处理流程是&#xff1a; 1.先在本地下载apr,apr-util,httpd共3个.tar.gz文件。 2.解压这3个文件。 3.安装pcre和pcre-devel依赖包。 4.编译安装apr。 5.编译安装apr-util。 6.编译安装httpd。 ---- hosts: alltasks: - name: download apr,apr-util,…

java jquery post_jquery js post变量set和get for post

我需要从php页面发送一些参数到另一个动态发布电子邮件&#xff0c;如果我发送硬编码的值是好的&#xff0c;但如果我在文本字段上发送值&#xff0c;它不起作用&#xff0c;这里的代码请求发送邮件的页面$otroYa other.val();console.log (other.val()); //shows value ok of…

深度报告:一文看懂生物芯片产业

来源&#xff1a;赛迪顾问生物芯片技术起源于二十世纪八十年代&#xff0c;也被称为“微流控技术”、“芯片实验室”等。生物芯片技术能够在邮票大小的芯片上&#xff0c;进行较为复杂的生物、化学、物理等实验&#xff0c;为制作成本低、样本少、时间短、操作简单的医疗仪器提…

java 设计模式 优缺点_java设计模式2:原型模式(机制\优缺点分析\使用场景)...

1、 原型模式实现机制原型模式在设计模式中相对比较简单&#xff0c;它直接通过实现 Cloneable接口&#xff0c;再重写 clone()方法返回想要的对象就OK 了。一起来看下代码 &#xff1a;public class ProtoType implements Cloneable {public ProtoType(){System.out.println(&…

人机融合的难点

来源&#xff1a;人机与认知实验室【一个深度态势感知者的周围充满了各种各样的暗示和提醒。】“我小时候读过很多科幻小说。其中一个最常见的主题是“人与机器”&#xff0c;它经常以机器人的形式变得自我意识和威胁人类。这一主题也成为了《终结者》和《黑客帝国》等好莱坞电…

asp.net core权限模块的快速构建

大部分系统都会有权限模块&#xff0c;别人家系统的权限怎么生成的我不知道&#xff0c;我只知道这样做是可以并且挺好的。 文章中只对asp.net core的部分代码进行说明 呃 记录~&#xff0c;mvc版本自行前往仓库查阅 代码中的一些特性标记后面列出,或前往仓库查看~ 1.根据特性标…

深度长文:AMD的崛起、衰落与复兴

来源&#xff1a;内容编译自「techspot」&#xff0c;谢谢。AMD是最早的大型微处理器设计者之一&#xff0c;近50年来一直是技术爱好者之间争论的话题。它的历史构成了一个激动人心的故事——充满了英雄式的成功&#xff0c;愚蠢的错误。在其他半导体公司来来往往的时候&#x…

数据结构-使用两个栈实现一个队列

1&#xff1a;如何只使用stack实现queue呢&#xff1f;我们知道stack是先进后出的&#xff08;FIFO&#xff09;&#xff0c;而queue是先进先出的&#xff08;FIFO&#xff09;。也就是说&#xff0c;stack进行了一次反向。如果进行两次反向&#xff0c;就能实现queue的功能&am…

5G时代下,边缘计算产品的未来展望

来源&#xff1a;北京物联网智能技术应用协会首发于人人都是产品经理。一、边缘计算市场潜力1. 5G基建如火如荼&#xff0c;万物互联互融将成为新战场2019年6月6号上午工信部宣布正式为中国移动、中国联通、中国电信、中国广电四家企业颁发5G牌照&#xff0c;中国正式进入5G元年…

使用Xcode进行iOS设备无线调试

设备环境&#xff1a;Mac OSX 10.12.5、iOS11、Xcode9PS:这是WWDC2017的新功能&#xff0c;iOS11以上&#xff0c;Xcode9这是刚性要求。这个功能不好找&#xff0c;就记下来了 手机连接上Xcode&#xff0c;打开Xcode菜单&#xff1a;Windows->Device and Simulators。找到连…