- 浏览: 80615 次
- 性别:
- 来自: 宁德
文章分类
最新评论
-
wizard945:
350850895@qq.com 感谢楼主
SSI的整合七部曲 -- 1、Struts2实现通过JDBC的CURD -
火红火红火箭迷:
请教一下,我的不能安装在在C盘的program files文 ...
分享MyEclipse安装及安装报错的解决方法 -
kdslafie:
没有具体的例子,只大概说了配置,一点都不明了。
Eclipse和MyEclipse插件的管理(以安装FatJar、UMLet作为示例说明) -
瘋叻ハ.兩:
Super丶曼 写道不好用啊,纠结啊。换了家公司,一直在用id ...
分享MyEclipse安装及安装报错的解决方法 -
Super丶曼:
不好用啊,纠结啊。
分享MyEclipse安装及安装报错的解决方法
初次学完抽象类和接口的童鞋,看多了“面向接口编程"字眼,也见多了“面向接口”的好多好处,总会感觉其神秘。然而有些书不给示例,总让我们感觉它的高不可攀,不知其所用。本篇将简单而又完整的介绍2个面向接口编程的例子。
一、简单工程模式
情景1:一个机器类Computer需要具体的输出设备Printer,有较好的两种方式选择:直接在Computer类中组合Printer类; 在2者之间搭个中介OutPut,使Computer组合OutPut,Printer实现OutPut。 那么如何选择哪种方式呢?暂且选第二种,至于为什么,且看代码慢慢分析...
1、机器类Computer
/**************************************************
* a machine 【 群:152380972 】
* @author: 瘋叻ハ.兩
* @revision: 1.0
* @create-time: 2011-9-14 下午01:35:30
***************************************************/
public class Computer {
// associate OutPut
private OutPut out;
public Computer(OutPut out){
this.out = out;
}
// to test, i change the return value
public String keyIn(String msg){
// pay attention to what out use the method
return out.getData(msg);
}
public void print(String msg){
out.out(msg);
}
}
2、接口OutPut:
/************************************************** * OutPut interface 【 群:152380972 】 * @author: 瘋叻ハ.兩 * @revision: 1.0 * @create-time: 2011-9-14 下午01:36:28 ***************************************************/ public interface OutPut { /** * in the Computer class, out use getData() and out() method * * so what the interface defines method obeies the needs */ // the mothed in the interface is "public abstract" defaultly public abstract String getData(String msg); // so it's ok for you to ignore the "abstract" keyword public void out(String msg); }
3、输出设备Printer:
/************************************************** * one of the output device. 【 群:152380972 】 * @author: 瘋叻ハ.兩 * @revision: 1.0 * @create-time: 2011-9-14 下午01:42:33 ***************************************************/ public class Printer implements OutPut{ /** * override abstract method to be specific. */ @Override public String getData(String msg) { return msg; } @Override public void out(String msg) { System.out.println(msg); } }
4、生产OutPut具体对象的工厂类OutPutFactory:
/************************************************** * the output factory 【 群:152380972 】 * @author: 瘋叻ハ.兩 * @revision: 1.0 * @create-time: 2011-9-14 下午01:41:26 ***************************************************/ public class OutPutFactory { // you can't instantiate an interface, however, you can refer to the interface public OutPut getOutPut(){ return new Printer(); } }
5、测试类Test:
/************************************************** * test class. 【 群:152380972 】 * @author: 瘋叻ハ.兩 * @revision: 1.0 * @create-time: 2011-9-14 下午02:20:00 ***************************************************/ public class Test { public static void main(String[] args) { OutPutFactory of = new OutPutFactory(); Computer cp = new Computer(of.getOutPut()); cp.print(cp.keyIn("这就是简单的工厂模型")); } }
这种模型降低了程序间的耦合,即降低程序之间的依赖程度。假如机器Computer升级,不需要低级的Printer设备,想换成BetterPrinter设备,那么只要让BetterPrinter实现OutPut接口、另在工程类修改生产的对象名即可,这样即使大数量的机器Computer升级输入设备也只要这么简单的代码即可完成系统升级。 再看第一种情况-- 直接组合Printer,那么如果百来个Computer需要升级Printer,那么就要修改百来份Computer代码。这就是面向接口的好处之一。
二、命令模式
情景2:假如有个方法需要遍历一个数组,但无法确定在遍历数组时如何处理数组元素,需要在调用该方法时具体指定。 本质上说,这个要求就类似在方法里传一个具体的方法操作作为形参。且看代码实现。
1、处理数组类HandleArrays:
/************************************************** * 【 群:152380972 】 * @author: 瘋叻ハ.兩 * @revision: 1.0 * @create-time: 2011-9-14 下午03:12:15 ***************************************************/ public class HandleArrays { public void handle(int[] target, Command cmd){ cmd.process(target); } }
2、命令接口Command:
/************************************************** * interface command. 【 群:152380972 】 * @author: 瘋叻ハ.兩 * @revision: 1.0 * @create-time: 2011-9-14 下午03:09:22 ***************************************************/ public interface Command { // to encapsulate behavior public void process(int[] target); }
3、处理方式之-- 打印PrintCommand:
/************************************************** * handle in printing. 【 群:152380972 】 * @author: 瘋叻ハ.兩 * @revision: 1.0 * @create-time: 2011-9-14 下午03:18:59 ***************************************************/ public class PrintCommand implements Command { @Override public void process(int[] target) { for(int temp : target){ System.out.println("输出目标数组的元素是:" + temp); } } }
4、处理方式之-- 求和AddCommand:
/************************************************** * handle in printing. 【 群:152380972 】 * @author: 瘋叻ハ.兩 * @revision: 1.0 * @create-time: 2011-9-14 下午03:18:59 ***************************************************/ public class PrintCommand implements Command { @Override public void process(int[] target) { for(int temp : target){ System.out.println("输出目标数组的元素是:" + temp); } } }
......还有很多处理方式
5、测试类Test:
/************************************************** * 【 群:152380972 】 * @author: 瘋叻ハ.兩 * @revision: 1.0 * @create-time: 2011-9-14 下午03:16:05 ***************************************************/ public class Test { public static void main(String[] args) { HandleArrays ha = new HandleArrays(); int[] target = {3, -4, 6, 4}; ha.handle(target, new PrintCommand()); System.out.println("-----------------------"); ha.handle(target, new AddCommand()); } }
代码很简单吧? 如果你没见过类似代码,可以复制到IDE运行并思考其运行过程,相信会让你重新认识接口,有了新的编码风格。个人其实慢慢熟练这些模型,对你以后对解读框架也是有很大的帮助,毕竟“九层之台起于垒土,千里之行始于足下”!希望本篇对你理解“面向接口”有所帮助...
谢谢您的欣赏!
发表评论
-
Oracle10G -- 图文介绍JNDI环境的搭建
2012-04-12 15:57 1373本文旨在图文介绍以Oracle为数据库的JNDI的 ... -
Oracle10G -- 图文介绍JDBC环境的搭建
2012-04-11 13:19 1823本文旨在图文介绍搭建以Oracle为数据库的JDB ... -
Java中、英文 1.6API(附截图)
2011-10-05 14:15 1438API的作用不再言表。如题,直接附上截图 j ... -
final,助你排除不稳定
2011-09-12 18:33 1160【友情提示, ... -
造型(Casting) --- 多态的延续
2011-09-07 13:57 998于此,在次申明个人觉得把握多态的最重要的一点:( ... -
Java进阶 ---- 多态(Polymorphism)
2011-09-06 21:28 3171从前面的继承(Inheritance)到比较thi ... -
this 和 super
2011-09-06 14:15 928一、this 和 super ... -
Java进阶 ---- 封装
2011-05-30 22:37 915封装,是面向对象三大特征之一。它指的是将对象的状态 ... -
Java起航 ---- 继承
2011-05-29 20:28 866一、Inheritance ... -
Java起航 ---- 类的初始化历程
2011-05-21 21:15 846既然谈到类的初始化,那就不得不把VM(Virtu ... -
Java起航 ---- 方法
2011-05-20 21:38 938方法,是类 ... -
Java起航 ---- 类的变量
2011-05-18 22:40 848续前一篇的介绍,本篇主要介绍各种变量的使用。它的分类,请 ... -
Java起航 ---- 类
2011-05-16 20:14 708没有特别的, ... -
Java前奏
2011-03-25 21:00 834差不多有一年没碰JavaSE了,这篇也是寒假回头复 ...
相关推荐
特别地,Christopher Alexander和他的同事们可能最先将模式语言(pattern language)应用于城市建筑领域,他的思想和其他人的贡献已经根植于面向对象软件界。简而言之,软件领域中的设计模式为开发人员提供了一种...
书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...
六个创建型模式 六个创建型模式 简单工厂模式-Simple Factory Pattern 工厂三兄弟之简单工厂模式(一) 工厂三兄弟之简单工厂模式(二) 工厂三兄弟之简单工厂模式(三) 工厂三兄弟之简单工厂模式(四) 工厂方法...
四、 工厂方法模式与简单工厂模式 33 五、 Factory Method模式演化 34 六、 Factory Method模式与其它模式的关系 35 七、 另外一个例子 35 C#设计模式(6)-Abstract Factory Pattern 38 一、 抽象工厂(Abstract ...
四、 工厂方法模式与简单工厂模式 五、 Factory Method模式演化 六、 Factory Method模式与其它模式的关系 七、 另外一个例子 C#设计模式(6)-Abstract Factory Pattern 一、 抽象工厂(Abstract Factory)...
3.2.1简单工厂模式实例之图形工厂 3.2.2工厂方法模式实例之日志记录器 3.2.3抽象工厂模式实例之数据库操作工厂 3.2.4建造者模式实例之游戏人物角色 3.2.5原型模式实例之快速创建工作周报 3.2.6单例模式实例之多...
第1章 面向对象程序设计、设计模式和ActionScript 3.0 成功之后的喜悦 OOP基础 抽象 封装 继承 多态性 使用设计模式进行软件开发的原则 使用接口而不是具体的实现 养成使用组合的习惯 计划项目时要同时...
81.6.1 寻找合适的对象 81.6.2 决定对象的粒度 91.6.3 指定对象接口 91.6.4 描述对象的实现 101.6.5 运用复用机制 131.6.6 关联运行时刻和编译时刻的结构 151.6.7 设计应支持变化 161.7 怎样选择设计模式 191.8 怎样...
优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、观察...
一步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、观察者模式、...
优化代码的第一步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、...
优化代码的第一步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、...
优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、观察...
1.3.2 利用继承实现变化的封装和简单的复用 1.3.3 借助模式封装多个变化 1.3.4 模式帮助我们解决问题 第2章 Delphi的模式编程机制 2.1 对象模型机制 2.1.1 对象模型 2.1.2 对象建模和模式编程 2.1.3 对象关系...
优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、观察...
1.3.2 利用继承实现变化的封装和简单的复用 1.3.3 借助模式封装多个变化 1.3.4 模式帮助我们解决问题 第2章 Delphi的模式编程机制 2.1 对象模型机制 2.1.1 对象模型 2.1.2 对象建模和模式编程 2.1.3 ...