适配器模式(类适配器)
生活随笔
收集整理的這篇文章主要介紹了
适配器模式(类适配器)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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);}}
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
總結
以上是生活随笔為你收集整理的适配器模式(类适配器)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DOM查找元素的方法总结
- 下一篇: [Jmeter] 基本使用的总结