- 浏览: 82351 次
- 性别:
- 来自: 宁德
文章分类
最新评论
-
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 1432本文旨在图文介绍以Oracle为数据库的JNDI的 ... -
Oracle10G -- 图文介绍JDBC环境的搭建
2012-04-11 13:19 1880本文旨在图文介绍搭建以Oracle为数据库的JDB ... -
Java中、英文 1.6API(附截图)
2011-10-05 14:15 1523API的作用不再言表。如题,直接附上截图 j ... -
final,助你排除不稳定
2011-09-12 18:33 1188【友情提示, ... -
造型(Casting) --- 多态的延续
2011-09-07 13:57 1037于此,在次申明个人觉得把握多态的最重要的一点:( ... -
Java进阶 ---- 多态(Polymorphism)
2011-09-06 21:28 3205从前面的继承(Inheritance)到比较thi ... -
this 和 super
2011-09-06 14:15 960一、this 和 super ... -
Java进阶 ---- 封装
2011-05-30 22:37 949封装,是面向对象三大特征之一。它指的是将对象的状态 ... -
Java起航 ---- 继承
2011-05-29 20:28 895一、Inheritance ... -
Java起航 ---- 类的初始化历程
2011-05-21 21:15 905既然谈到类的初始化,那就不得不把VM(Virtu ... -
Java起航 ---- 方法
2011-05-20 21:38 976方法,是类 ... -
Java起航 ---- 类的变量
2011-05-18 22:40 880续前一篇的介绍,本篇主要介绍各种变量的使用。它的分类,请 ... -
Java起航 ---- 类
2011-05-16 20:14 737没有特别的, ... -
Java前奏
2011-03-25 21:00 867差不多有一年没碰JavaSE了,这篇也是寒假回头复 ...
相关推荐
- 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 - 构建者模式(Builder):将一个复杂对象的构建与其表示分离,使同样的构建过程可以创建不同的表示...
3. 行为型模式:涉及对象之间的职责分配,包括命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式等。 每种模式都有其使用场景和优缺点,...
- 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而无需指定它们的具体类。 - 建造者模式(Builder):将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示...
在C#编程中,抽象工厂模式常用于框架和库的设计,例如数据库访问层,根据不同的数据库提供商(如SQL Server、Oracle等)创建对应的数据库连接和命令对象。在“李建忠 C#面向对象设计模式纵横谈(3):Abstract Factory...
特别地,Christopher Alexander和他的同事们可能最先将模式语言(pattern language)应用于城市建筑领域,他的思想和其他人的贡献已经根植于面向对象软件界。简而言之,软件领域中的设计模式为开发人员提供了一种...
常见的有策略模式、命令模式、观察者模式等。 - **策略模式**:定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法独立于使用它的客户而变化。 - **观察者模式**:定义了对象之间的一...
- 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。 - 建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。...
- **抽象工厂模式**(Abstract Factory):提供一个接口,用于创建相关或依赖对象的族,而无需指定它们具体的类。 - **建造者模式**(Builder):将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建...
行为型模式则关注对象之间的交互和职责分配,如观察者模式、策略模式、命令模式等。 在面向对象培训中,设计模式的学习通常包括以下几个关键点: 1. **单一职责原则**(Single Responsibility Principle, SRP):...
- 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,无需指定它们的具体类。 - 建造者模式:将复杂对象的构建与其表示分离,使同样的构建过程能创建不同的表示。 - 原型模式:通过复制已有对象来创建...
- 行为型模式:策略模式、模板方法模式、观察者模式、责任链模式、命令模式、迭代器模式、访问者模式、备忘录模式和解释器模式。这些模式主要处理对象之间的交互和行为。 在C#中,例如,我们可以使用单例模式来确保...
1. **抽象工厂模式**:提供了一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。 2. **工厂方法模式**:定义了一个创建对象的接口,但让子类决定实例化哪一个类。它使得一个类的实例化延迟到...
六、命令模式 定义:把一个请求封装一个对象,用不同的请求队列和日志来参数化其他的对象。 应用条件:需要将请求参数化 案例:遥控器 类图: * Command(命令) + execute(执行命令) * Invoker(调用者) ...
1. 工厂模式:工厂模式是一种创建型设计模式,提供了一种创建对象的最佳方式,通过抽象工厂接口,避免了代码与具体类的耦合,提高了系统的可扩展性。 2. 单例模式:单例模式确保一个类只有一个实例,并提供全局访问...
单例模式和命令模式是两种常见的设计模式,在软件开发中有着广泛的应用。它们分别解决了不同的问题,但在实际项目中,可以巧妙地结合使用,以提高代码的灵活性和可维护性。 单例模式是一种确保一个类只有一个实例,...
代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template Method...
在C++中,命令模式可以通过定义命令接口和具体命令类来实现,008.PDF可能对此有详细的介绍。 9. **状态模式**(State):允许对象在其内部状态改变时改变其行为。在C++中,状态模式通常涉及到状态类的继承结构和上...
书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...
本篇将详细解析几种常见的设计模式,包括单例模式、工厂模式和命令模式。 首先,我们来看工厂方法模式。在软件开发中,经常遇到需要创建对象,但具体创建哪种类型的对象取决于特定条件的情况。工厂方法模式提供了一...
创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如策略模式、模板方法模式...