跟王老师学接口(三):面向接口编程:简单工厂模式
2016-04-20 13:22
561 查看
面向接口编程:简单工厂模式
主讲教师:王少华 QQ群号:483773664
掌握简单工厂模式
一、面向对象编程提倡面向接口编程
在面向对象编程中提倡面向接口编程,而不是面向实现编程。
(一)为什么
假设某电脑公司,生产的电脑它需要一个打印功能,它有二种选择,一种是与某个打印机生产公司结成战略合作伙伴关系,我公司生产的电脑,只能用你的打印机,另外一种是方式,我定义一个规范,只要生产打印机公司按照我这种规范生产的打印机,我的电脑都能识别。
我们将这二种方式用代码的形式来实现一下
二、简单工厂模式(一)应用场景:
以上面的例子为场景,假设一个公司,占门代工生产各种型号的打印机,而且这些打印机都符合生产电脑的公司的规范,那么这个电脑公司就不需要去找各个打印机公司要打印机了,只需要去这个打机印代工工厂要打印机就可以了。这就是简单工厂模式在实际生活的应用。
2、OutputFactory:打印机生产的代工厂
3、Computer
4、Test
(三)优化
现在我们使用的简单工厂模式,还存在一个弱点,就是我们要在工厂中手动指定一个产品,我们希望这个工厂是这样的:客户需给一个打印机的名称,它就能生产出这种打印机。
这里要用到Java的反射机制。具体实现如下
OutputFactory
来自为知笔记(Wiz)
主讲教师:王少华 QQ群号:483773664
学习目标
理解面向接口编程的优势掌握简单工厂模式
一、面向对象编程提倡面向接口编程
在面向对象编程中提倡面向接口编程,而不是面向实现编程。(一)为什么
假设某电脑公司,生产的电脑它需要一个打印功能,它有二种选择,一种是与某个打印机生产公司结成战略合作伙伴关系,我公司生产的电脑,只能用你的打印机,另外一种是方式,我定义一个规范,只要生产打印机公司按照我这种规范生产的打印机,我的电脑都能识别。我们将这二种方式用代码的形式来实现一下
12345 | public class Printer { public void print(){ System.out.println( "我是战略合作伙伴" ); } } |
123 | public interface Output { public void out(String str); } |
1234 | public class Computer { private Printer printer; //这种方式缺点很明显,耦合度太高 private Output output; } |
(二)面向接口编程的优势
接口体现了约定和实现相分离的原则,通过面向接口编程,可以降低代码间的耦合性,提高代码的可扩展性和可维护性。二、简单工厂模式
(一)应用场景:
以上面的例子为场景,假设一个公司,占门代工生产各种型号的打印机,而且这些打印机都符合生产电脑的公司的规范,那么这个电脑公司就不需要去找各个打印机公司要打印机了,只需要去这个打机印代工工厂要打印机就可以了。这就是简单工厂模式在实际生活的应用。(二)代码实现
1、PrinterA:一种打印机产品
12345 | public class PrinterA implements Output{ public void out(String str) { System.out.println(str); System.out.println( "PrinterA" ); } } |
123456789 | public class OutputFactory { /** * 专门用于生产打印机 * @return */ public Output getOutput(){ return new PrinterA(); } } |
123456 | public class PrinterA implements Output{ public void out(String str) { System.out.println(str); System.out.println( "PrinterA" ); } } |
1234567 | public class Test { public static void main(String[] args) { OutputFactory outputFactory = new OutputFactory(); Computer computer = new Computer(outputFactory.getOutput()); computer.print( "我要打印" ); } } |
现在我们使用的简单工厂模式,还存在一个弱点,就是我们要在工厂中手动指定一个产品,我们希望这个工厂是这样的:客户需给一个打印机的名称,它就能生产出这种打印机。
这里要用到Java的反射机制。具体实现如下
OutputFactory
12345678910 | public Output creatOutput(String printName) throws InstantiationException, IllegalAccessException, ClassNotFoundException{ if (printName.equalsIgnoreCase( "PrinterA" )){ return PrinterA. class .newInstance(); } else if (printName.equalsIgnoreCase( "PrinterB" )){ return PrinterB. class .newInstance(); } else { System.out.println( "抱歉,这种打印机,我生产不了!!!" ); return null ; } } |
相关文章推荐
- fastjson处理接口时的一个问题
- 局域网与广域网接口标准
- RJ-45接口信号定义
- DVI 视频接口图文解析
- 如何设置域名接口
- 通过C#实现自动售货机接口
- C#中IEnumerable接口用法实例分析
- C#中实现判断某个类是否实现了某个接口
- C#隐式/显示实现接口方法详解
- C#实现两接口中同名方法实例分析
- 详解C#中的接口属性以及属性访问器的访问限制
- C#中的ICustomFormatter及IFormatProvider接口用法揭秘
- C#接口实现方法实例分析
- 基于C# 中可以new一个接口?的问题分析
- C#抽象类和接口的区别分析
- 详细解读PHP中接口的应用
- php单一接口的实现方法
- C#中类与接口的区别个人总结
- C语言接口与实现方法实例详解
- 学习JavaScript设计模式(接口)