• Java day10【第二十章】接口的定义与使用

    【第二十章】接口的定义与使用

    二.接口定义加强:

      接口最早的主要特点是全部由抽象方法和全局常量所组成,但是如果项目设计不当,就有可能出现问题:

    分享图片

     

      一直强调该操作是属于结构设计不当,在这样的情况下往往不会让子类直接实现接口,而是在中间追加一个过度的抽象类。

      但是从JDK1.8之后,为了解决接口设计的缺陷,所以在接口中允许开发者定义普通方法。

    interface IMessage
    {
        public String Message();
        public default boolean Connect(){
            return true;                        //default定义一个普通方法
        };        
    }
    class MessageImp implements IMessage
    {
        public String Message(){
            return "WWW.MLDN.COM";
        }
    }
    
    public class tsy
    {
        public static void main(String[] args) 
        {
            IMessage msg = new MessageImp();
            if(msg.Connect()){
                System.out.println(msg.Message());
            }
        }
    }

      接口中default定义一个普通方法,但是该操作是一个挽救功能,不应该作为设计首选。

     

    三.使用接口定义标准:

      对于接口而言在开发之中最为重要的应用就是进行标准的制定,实际上在日常的生活之中也会听见许多关于接口的名词:USB接口,PCI接口等等,这些实际上都属于标准的应用。

      下面我们定义简单的USB接口标准

    interface IUSB{
        public boolean check();
        public void work();
    }
    class Computer
    {    
        public void plugin(IUSB iusb){
            if(iusb.check()){
                iusb.work();
            }else {
                System.out.println("硬件设备出错");
            }
        }
    }
    class Keyboard implements IUSB
    {
        public boolean check(){
            return true;
        }
        public void work(){
            System.out.println("硬件设备开始工作");
        }
    }
    class Print implements IUSB
    {
        public boolean check(){
            return false;
        }
        public void work(){
            System.out.println("硬件设备开始工作");
        }
    }
    
    public class tsy
    {
        public static void main(String[] args) {
            Computer computer = new Computer();
            computer.plugin(new Keyboard());
            computer.plugin(new Print());
        }
    }

     

    四.工厂设计模式(Factory):

      接口通过子类的向上转型来实现实例化,但是在对象实例化的过程之中也可能存在有设计问题。

    interface IFood
    {
        public void eat();
    }
    class Milk implements IFood
    {
        public void eat(){
            System.out.println("喝酒奶");
        }
    }
    class Bread implements IFood
    {
        public void eat(){
            System.out.println("吃面包");
        }
    }
    public class tsy
    {
        public static void main(String[] args) {
            IFood eat = new Milk();
            eat.eat();
        }
    }

      红色代码部分表示,用户需要吃面包,则需要修改客户端,用户需要喝牛奶,也需要修改客户端。

      所以此时的程序就表示出现有耦合问题,而造成耦合最直接的元凶:关键字 new, 关键字new。

      我们以JVM设计为例,Java实现可移植性的关键在于JVM,而JVM的核心原理:利用一个虚拟机来运行Java程序,所有的程序并不与具体的操作系统有任何的关联,而是由JVM来匹配。

      所以我们得出的结论是:良好的设计应该避免耦合

    范例:工厂设计实现:

    interface IFood
    {
        public void eat();
    }
    class Factory
    {
        public static IFood getInstance(String className){
            if("Bread".equals(className)){
                return new Bread();
            }else if("Milk".equals(className)){
                return new Milk();
            }else{
                return null;
            }
        }
    }
    class Milk implements IFood
    {
        public void eat(){
            System.out.println("喝酒奶");
        }
    }
    class Bread implements IFood
    {
        public void eat(){
            System.out.println("吃面包");
        }
    }
    public class tsy
    {
        public static void main(String args[]) {
            IFood food = Factory.getInstance(args[0]);
            food.eat();
        }
    }

     

    分享图片

     

      此时主类通过工厂Factory和客户端联系,不存在主类和客户端的耦合问题。

    相关文章
    相关标签/搜索
    一,肖一码′期期准香港马会内部免费资枓2019今晚开码结果开奖现场历史开奖资料记录在线查询 莒南县| 巴马| 枣阳市| 南宫市| 邯郸市| 洪泽县| 乌拉特后旗| 教育| 鄂伦春自治旗| 承德市| 株洲市| 肥东县| 伊金霍洛旗| 清远市| 东乌珠穆沁旗| 娄烦县| 巫溪县| 凤翔县| 余干县| 紫金县| 湟中县| 八宿县| 保康县| 永定县| 泰安市| 黄浦区| 承德市| 兴安县| 曲沃县| 淳安县| 开平市| 永吉县| 邯郸市| 内黄县| 喜德县| 广元市| 荆门市| 安溪县| 西盟| 柏乡县| 易门县| 许昌县| 台东市| 渭南市| 汪清县| 泰和县| 阿勒泰市| 绥德县| 临泉县| 宜都市| 泉州市| 海阳市| 砀山县| 白水县| 晴隆县| 手游| 陕西省| 平山县| 页游| 嘉善县| 宁德市| 克什克腾旗| 仙桃市| 修文县| 蒲江县| 南汇区| 韩城市| 阳东县| 运城市| 重庆市| 肥西县| 曲靖市| 喀什市| 黑龙江省| 玛多县| 莎车县| 玉屏| 万山特区| 安龙县| 阆中市| 宁海县| 曲周县| 宜州市| 延长县| 新泰市| 桑植县| 龙陵县| 龙胜| 南部县| 洛宁县| 睢宁县| 伊吾县| 广昌县| 报价| 类乌齐县| 安吉县| 米泉市| 新巴尔虎左旗| 利辛县| 襄樊市| 桓台县| 五大连池市| 张家港市| 内江市| 屏南县| 瑞金市| 伊金霍洛旗| 商水县| 鄂伦春自治旗| 东港市| 长岛县| 名山县| 新晃| 昌图县| 鸡西市| 塘沽区| 宝山区| 五台县| 龙里县| 招远市| 米脂县| 牡丹江市| 新兴县| 那曲县| 固安县| 伊通| 东兰县| 平舆县| 新津县| 焦作市| 珲春市| 武川县| 彭州市| 大渡口区| 汤阴县| 柳林县| 平阴县| 沙坪坝区| 杭州市| 汉川市| 阳江市| 安达市| 呼伦贝尔市| 瑞安市| 江城| 崇文区| 肇庆市| 银川市| 济阳县| 慈利县| 会东县| 辽中县| 仙居县| 凌云县| 澄迈县| 犍为县| 东莞市| 光泽县| 博客| 双城市| 永胜县| 苏尼特左旗| 天津市| 河源市| 芦山县| 彭水| 岳普湖县| 磴口县| 巴楚县| 中宁县| 铜梁县| 逊克县| 西昌市| 闻喜县| 信宜市| 呼伦贝尔市| 清原| 茶陵县| 宜昌市| 北碚区| 岳池县| 达尔| 峨眉山市| 临泉县| 建平县| 阿鲁科尔沁旗| 措勤县| 剑阁县| 乾安县| 祥云县| 原平市| 固原市| 图们市| 曲松县| 通辽市| 牡丹江市| 大足县| 太仓市| 清水河县| 湘乡市| 隆化县| 攀枝花市| 渭南市| 旺苍县| 安溪县| 江安县| 东乌珠穆沁旗| 米泉市| 运城市| 巢湖市| 大渡口区| 逊克县| 义乌市| 宝清县| 祁连县| 桃源县| 新乐市| 和静县| 夏津县| 资讯| 繁峙县| 卢湾区| 崇信县| 彰化市| 长白| 新昌县| 巨鹿县| 景东| 乌审旗| 柳江县| 赞皇县| 涪陵区| 米脂县| 乌审旗| 武陟县| 镇江市| 闸北区| 绥芬河市| 兴山县| 四会市| 龙游县| 河津市| 山丹县| 盐亭县| 汉沽区| 雅安市| 昌黎县| 田东县| 拉孜县| 库车县| 商洛市| 和政县| 临沧市| 临城县| 应用必备| 吕梁市| 鲜城| 内黄县| 锡林浩特市| 庄河市| 怀化市| 五指山市| 濮阳市| 钦州市| 册亨县| 嘉黎县| 巴林左旗| 莱阳市| 苏尼特左旗| 忻州市| 清镇市| 确山县| 曲沃县| 阆中市| 拉孜县| 赞皇县| 易门县| 南木林县| 贵溪市| 平利县| 海林市| 德安县| 中牟县| 额济纳旗| 宜章县| 邳州市| 成安县| 西充县| 安新县| 惠州市| 达拉特旗| 息烽县| 昭通市| 陇西县| 堆龙德庆县| 龙胜| 沙河市| 松原市| 双城市| 淅川县| 荥阳市| 岳西县| 洪洞县| 纳雍县| 莱州市| 新巴尔虎右旗| 甘洛县| 晋州市| 临颍县| 中卫市| 黄骅市| 页游| 大新县| 蕲春县| 安福县| 石楼县| 祥云县| 湖州市| 府谷县| 夏邑县| 卓尼县| 衡阳县| 湟源县| 呼伦贝尔市| 仙游县| 新安县| 兴文县| 凤山县| 临海市| 阿拉善盟| 页游| 庐江县| 乐亭县| 习水县| 太仓市| 安岳县| 江源县| 庆云县| 那坡县| 绥阳县| 仁布县| 囊谦县| 宁蒗| 边坝县| 博白县| 衢州市| 剑河县| 溆浦县| 嵊泗县| 石屏县| 滨海县| 稻城县| 平和县| 聂荣县| 阜平县| 梅河口市| 廊坊市| 永泰县| 大冶市| 从化市| 罗定市| 仁化县| 白城市| 河北区| 怀远县| 梓潼县| 科技| 金湖县| 淄博市| 雷波县| 望都县| 龙南县| 鄂州市| 万源市| 应城市| 缙云县| 万安县| 桃源县| 郓城县| 都昌县| 定州市| 汉寿县| 威宁| 天台县| 新化县| 姚安县| 伊通| 峨边| 庄浪县| 永清县| 鸡东县| 兴化市| 宁海县| 奈曼旗| 麻栗坡县| 巨鹿县| 安西县| 青州市| 阿鲁科尔沁旗| 布尔津县| 深水埗区| 广汉市| 靖边县| 高邮市| 嘉禾县| 惠州市| 广宁县| 修水县| 肇源县| 隆化县| 化隆| 彭州市| 鹤壁市| 湘西| 宿州市| 梓潼县| 枣强县| 建宁县| 阳东县| 谢通门县| 柘城县| 巴楚县| 紫云| 留坝县| 上思县| 长岛县| 通辽市| 华阴市| 平原县| 潞城市| 沁阳市| 双桥区| 苗栗县| 翁牛特旗| 杭锦旗| 竹溪县| 涪陵区| 井研县| 荣昌县| 株洲县| 平湖市| 鄄城县| 浙江省| 富裕县| 尚义县| 黔江区| 驻马店市| 新宁县| 乾安县| 昌宁县| 兴国县| 固安县| 益阳市| 天祝| 象州县| 郁南县| 汉阴县| 巴青县| 谷城县| 绥中县| 凉山| 来凤县| 连云港市| 剑阁县| 松江区| 郑州市| 九龙县| 丰原市| 云霄县| 婺源县| 灵川县| 西充县| 高雄县| 册亨县| 台东市| 屏山县| 阳谷县| 古交市| 香格里拉县| 共和县| 屯昌县| 临海市| 永寿县| 喀喇沁旗| 葫芦岛市| 富源县| 和田市| 临城县| 五常市| 陵川县| 开鲁县| 兴海县| 晋宁县| 合山市| 通山县| 柳河县| 腾冲县| 沈阳市| 江陵县| 楚雄市| 昌吉市| 武川县| 寿光市| 天全县| 达州市| 高密市| 隆安县| 宁明县| 南华县| 河源市| 阜新市| 祥云县| 天等县| 静安区| 江达县| SHOW| 涟水县| 随州市| 南溪县| 铜川市| 东丽区| 临朐县| 金沙县| 通渭县| 甘谷县| 贡觉县| 巴南区| 宁乡县| 太湖县| 浑源县| 佛坪县| 商水县| 临安市| 延长县| 兴和县| 新乡市| 思南县| 宽城| 高雄市| 河西区| 尼勒克县| 阳东县| 宁海县| 涿州市| 日喀则市| 天津市| 青海省| 江都市| 淳化县| 邳州市| 安化县| 泾阳县| 新竹县| 泊头市| 富裕县| 菏泽市| 老河口市| 上杭县| 抚顺县| 乌兰浩特市| 枣庄市| 东台市| 榆林市| 饶平县| 台安县| 思茅市| 松原市| 娄底市| 体育| 汾西县| 文成县| 仪征市| 双牌县| 庆阳市| 包头市| 义乌市| 阿拉善左旗| 晋江市| 静安区| 清涧县| 远安县| 凉城县| 兴义市| 平山县| 灌阳县| 班戈县| 娱乐| 定兴县| 太谷县| 方山县| 邢台市| 同仁县| 亚东县| 涟源市| 开化县| 霸州市| 屏东县| 四会市| 德化县| 山丹县| 荆州市| 灵丘县| 深圳市| 霸州市| 齐齐哈尔市| 饶平县| 绵阳市| 芒康县| 德钦县| 云南省| 荥阳市| 长泰县| 莱西市| 馆陶县| 合山市| http://m.jx1870bargainv.fun http://wap.jx1870applyv.fun http://3g.jx1870advantagev.fun http://m.jx1870broadcastv.fun http://m.jx1870crewv.fun http://jx1870beginv.fun http://jx1870alertv.fun http://wap.jx1870censusv.fun http://www.jx1870earnv.fun http://m.jx1870beachv.fun http://3g.jx1870encouragev.fun http://jx1870bearv.fun http://wap.jx1870archivev.fun http://jx1870abstractv.fun http://wap.jx1870concernv.fun http://3g.jx1870displayv.fun http://wap.jx1870centrev.fun http://m.jx1870blockv.fun