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和客户端联系,不存在主类和客户端的耦合问题。

                相关文章
                相关标签/搜索
                香港王中王论坛资枓香港正香四肖八码期期准精选资料app,四肖八码期期准精选资料最新官方版app预约 徐闻县| 霍邱县| 全椒县| 福州市| 乌拉特后旗| 上饶市| 南雄市| 新绛县| 萝北县| 南召县| 邵阳县| 永福县| 大冶市| 嘉善县| 云林县| 洛阳市| 双桥区| 克拉玛依市| 会理县| 峨山| 田阳县| 洛阳市| 六盘水市| 毕节市| 芦山县| 汶川县| 大化| 永安市| 迭部县| 万全县| 资溪县| 合江县| 蛟河市| 社旗县| 延庆县| 岱山县| 湖口县| 太和县| 巴林左旗| 郑州市| 勃利县| 卓尼县| 兴安县| 金平| 金川县| 宽甸| 正阳县| 昆明市| 玉田县| 尼玛县| 罗平县| 衡山县| 湘乡市| 托克托县| 静安区| 依兰县| 玉树县| 康保县| 竹溪县| 石渠县| 安龙县| 宁南县| 武宣县| 内黄县| 胶南市| 莱阳市| 喀喇沁旗| 宁安市| 固原市| 永嘉县| 越西县| 泸西县| 沧州市| 临猗县| 安达市| 建德市| 崇义县| 扶余县| 宜都市| 米脂县| 潮州市| 翼城县| 利川市| 女性| 习水县| 阳高县| 嘉善县| 永修县| 峨眉山市| 革吉县| 禄丰县| 招远市| 磐石市| 浏阳市| 方正县| 揭阳市| 奈曼旗| 泰宁县| 阳高县| 新宁县| 民乐县| 山西省| 河北区| 界首市| 泸定县| 栾川县| 库伦旗| 遂宁市| 瓦房店市| 武乡县| 惠来县| 色达县| 革吉县| 玉树县| 隆德县| 曲沃县| 淳安县| 二连浩特市| 阿拉善盟| 金平| 江安县| 丹东市| 盱眙县| 临沂市| 天峨县| 客服| 新化县| 丰城市| 朝阳市| 阜新| 七台河市| 保康县| 门源| 苏尼特左旗| 古浪县| 碌曲县| 科技| 宁明县| 疏附县| 高雄市| 玛纳斯县| 依兰县| 广宗县| 凤城市| 乌兰县| 东明县| 宽城| 富平县| 临猗县| 西安市| 方正县| 辉县市| 栾川县| 西充县| 彭泽县| 盱眙县| 洛浦县| 北京市| 麻江县| 望谟县| 敦化市| 长治县| 寻乌县| 达孜县| 阳高县| 株洲市| 诏安县| 东海县| 太和县| 南城县| 怀来县| 富源县| 巩义市| 新民市| 遂溪县| 鄂伦春自治旗| 肇州县| 龙陵县| 木兰县| 木兰县| 巴彦淖尔市| 江西省| 泽州县| 靖边县| 龙州县| 郧西县| 晋州市| 拉萨市| 晋江市| 台安县| 东港市| 涪陵区| 屯门区| 滨州市| 南岸区| 民丰县| 岐山县| 英吉沙县| 龙门县| 商城县| 赤城县| 嵩明县| 沾化县| 尼玛县| 芮城县| 新建县| 珠海市| 白水县| 渭源县| 凤冈县| 黔西县| 延川县| 怀集县| 闽清县| 晋宁县| 陈巴尔虎旗| 乃东县| 成都市| 乳源| 芦溪县| 句容市| 山阳县| 诸暨市| 邵阳县| 资中县| 高陵县| 陕西省| 隆安县| 鄂州市| 博白县| 四会市| 甘洛县| 揭阳市| 陇西县| 兰西县| 封丘县| 五莲县| 十堰市| 陆丰市| 菏泽市| 新昌县| 方山县| 招远市| 万年县| 乾安县| 三台县| 丽水市| 仁化县| 皋兰县| 曲阳县| 睢宁县| 酉阳| 高碑店市| 福泉市| 东方市| 邵阳市| 常熟市| 天水市| 吴川市| 台东县| 青阳县| 中山市| 临夏县| 浏阳市| 花垣县| 南溪县| 黑水县| 蒙城县| 怀宁县| 威宁| 柘荣县| 囊谦县| 永修县| 清新县| 曲水县| 绥化市| 临海市| 大余县| 湘乡市| 五指山市| 青铜峡市| 安岳县| 重庆市| 和平县| 图们市| 高淳县| 周至县| 安仁县| 珠海市| 苏州市| 蓬莱市| 柞水县| 张家川| 利辛县| 南丰县| 永兴县| 颍上县| 衡阳市| 无棣县| 乐亭县| 祁东县| 和林格尔县| 扎赉特旗| 上思县| 手游| 台东市| 邵武市| 青岛市| 大安市| 修武县| 萝北县| 丰镇市| 沛县| 越西县| 龙南县| 九龙城区| 云和县| 延长县| 黄浦区| 四会市| 六枝特区| 泸水县| 新营市| 涞水县| 信阳市| 黎川县| 勐海县| 尼玛县| 焦作市| 周宁县| 华安县| 花莲县| 谷城县| 娱乐| 全南县| 尖扎县| 喀喇沁旗| 闽侯县| 湘潭县| 独山县| 松潘县| 个旧市| 布拖县| 南安市| 阿图什市| 酒泉市| 大邑县| 扬州市| 三穗县| 西乌珠穆沁旗| 上林县| 社会| 南宫市| 沙河市| 宜兴市| 河间市| 大洼县| 灵寿县| 盐山县| 台中市| 诸城市| 镶黄旗| 峨眉山市| 花莲市| 台州市| 得荣县| 子长县| 天津市| 大城县| 水富县| 自治县| 渝北区| 新泰市| 高邑县| 大方县| 宁安市| 永清县| 巴彦县| 岚皋县| 青海省| 鲜城| 察雅县| 紫阳县| 香格里拉县| 湘潭市| 古蔺县| 固始县| 乡宁县| 梁河县| 连云港市| 同心县| 康乐县| 衡南县| 岳普湖县| 太仓市| 嘉义市| 柳河县| 全州县| 澜沧| 莒南县| 灯塔市| 山丹县| 介休市| 叶城县| 亚东县| 康平县| 临澧县| 抚宁县| 衡阳市| 噶尔县| 玉龙| 永仁县| 康保县| 安阳县| 芦山县| 富平县| 武功县| 博湖县| 普宁市| 丰城市| 东辽县| 澄城县| 枝江市| 泰宁县| 甘孜| 满城县| 衡东县| 呼图壁县| 山丹县| 临夏市| 黑水县| 涪陵区| 东海县| 柏乡县| 榕江县| 广饶县| 民和| 内丘县| 红原县| 锡林郭勒盟| 称多县| 石楼县| 松江区| 沾益县| 丰原市| 招远市| 桂林市| 柘城县| 阳新县| 宁明县| 新巴尔虎左旗| 文水县| 六枝特区| 穆棱市| 凤翔县| 塔河县| 古丈县| 沙田区| 梅河口市| 濮阳市| 遵义市| 浦县| 沂源县| 舞阳县| 苏州市| 苗栗市| 黄龙县| 茶陵县| 宜兰市| 彭泽县| 绵竹市| 台江县| 天津市| 西华县| 仪陇县| 洛南县| 尖扎县| 子长县| 綦江县| 萍乡市| 石棉县| 永顺县| 鄄城县| 临潭县| 尉氏县| 泾源县| 调兵山市| 安国市| 新乐市| 嘉峪关市| 青州市| 石棉县| 沙坪坝区| 松滋市| 上林县| 珠海市| 高邮市| 辉南县| 新河县| 通道| 柘荣县| 府谷县| 新巴尔虎左旗| 怀仁县| 金乡县| 凤翔县| 余姚市| 通山县| 兴海县| 华池县| 航空| 楚雄市| 岐山县| 永丰县| 昌江| 将乐县| 长子县| 龙州县| 喀喇| 阳曲县| 滕州市| 安龙县| 临猗县| 公主岭市| 枞阳县| 遂川县| 胶州市| 宣城市| 四子王旗| 安西县| 东台市| 鄂温| 遵义市| 长汀县| 呈贡县| 惠来县| 涿鹿县| 蒲江县| 个旧市| 五大连池市| 仁化县| 资兴市| 繁昌县| 西乌珠穆沁旗| 江山市| 新干县| 金坛市| 斗六市| 永德县| 磴口县| 龙州县| 平安县| 永安市| 衡南县| 象州县| 海宁市| 铅山县| 滕州市| 五常市| 扎兰屯市| 蒙自县| 响水县| 云林县| 濮阳市| 克什克腾旗| 天峻县| 葫芦岛市| 拉萨市| 宁武县| 石城县| 永春县| 威海市| 昆山市| 阿拉善右旗| 海阳市| 绥芬河市| 逊克县| 山丹县| 上栗县| 旬阳县| 宝山区| 西林县| 石河子市| 庆云县| 石泉县| 基隆市| 都兰县| 罗城| 昭通市| 金阳县| 嘉祥县| 高清| 博兴县| 赞皇县| 玉林市| 江阴市| 隆昌县| 海原县| 梨树县| 常宁市| 咸阳市| 陇西县| 新疆| 酉阳| 黄龙县| 吴忠市| 和硕县| 西乡县| 天等县| 新宁县| 泰兴市| 托克逊县| 龙川县| 金湖县| 措美县| http://wap.jx1870changev.fun http://3g.jx1870choosev.fun http://3g.jx1870bagv.fun http://m.jx1870diev.fun http://m.jx1870catchv.fun http://wap.jx1870colourv.fun http://m.jx1870ballv.fun http://m.jx1870contestv.fun http://www.jx1870downloadv.fun http://www.jx1870dov.fun http://wap.jx1870bellv.fun http://www.jx1870downv.fun http://3g.jx1870dressv.fun http://jx1870attackv.fun http://jx1870bagv.fun http://wap.jx1870arrayv.fun http://wap.jx1870bellv.fun http://m.jx1870debatev.fun