静态工厂模式
来源:互联网 发布:lab series 知乎 编辑:程序博客网 时间:2024/05/18 23:57
主要是学习Mars的Java4Android 接口的应用这集视频做的笔记
引例:
接口是面向对象的核心,
例子是有一个Printer的接口(定义一种标准,有开机、关机和打印),然后HPPrinter类、CanonPrinter类去实现这个接口
1、Printer.java
interface Printer{public void open();public void close();public void print(String s);}2、HPPrinter.java
class HPPrinter implements Printer{public void open(){System.out.println("HP open");}public void close(){System.out.println("HP close");}public void print(String s){System.out.println("HP print---" + s);}}3、CanonPrinter.java
class CanonPrinter implements Printer{private void clean(){System.out.println("clean");}public void close(){this.clean();System.out.println("Canon close");}public void open(){System.out.println("Canon open");}public void print(String s){System.out.println("Canon print--->" + s);}}
4、Test.java
class Test{public static void main(String args []){Printer printer = null;int flag == 1;if(flag == 0){printer = new HPPrinter();}if(flag == 1){printer = new CannonPrinter();}printer.open();printer.print("test");printer.close();}}问题:
如果只是定义了一个抽象产品类角色(Printer)和具体产品类角色(HPPrinter、CanonPrinter),
那么测试用例(Test.java)就需要不断的new 具体打印机,(如果写另外一个测试用例,还是在new 具体打印机)
这时是重复写代码。
解决方法:静态工厂模式(又称简单工厂模式)
面向对象的终极目标之一就是减少重复代码。
把重复代码放在一个地方,当需要这些代码所提供的功能时,不是重复写一遍代码,而是调用这些功能。
加入入一个工厂类角色,把new 具体打印机的功能放在这个类中:
(设计静态工厂模式的思路就是:生成对象的代码(即使用new调用构造函数的代码)封装在工厂类当中)
PrinterFactory.java
class PrinterFactory{public static Printer getPrinter(int flag){//静态函数 向上转型Printer printer = null;if(flag == 0){printer = new HPPrinter();}else if (flag == 1) {printer = new CanonPrinter();}return printer;}}此时测试用例可以改写成调用PrinterFactory的getPrinter方法:
Test.java
class Test{public static void main(String args []){int flag = 1;Printer printer = PrinterFactory.getPrinter(flag);printer.open();printer.print("test");printer.close();}}在这个例子中使用静态工厂模式好处是:
使用者不需要new 打印机,只需调用即可,不需要知道子类,而开发者也方便修改
(工厂类负责所有产品对象的创建,客户端在需要创建对象时,告诉工厂需要哪种类型,工厂就负责创建。)
设计模式结构图:
本文例子的结构图:
深入理解工厂模式:
静态工厂模式再往复杂方向变化是
工厂模式(多一个抽象工厂类角色)
参考点击打开链接
抽象工厂模式
参考点击打开链接
总结主要优点:
可以使代码结构清晰,有效地封装变化。在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,
使得调用者根本无需关心产品的实例化过程,只需依赖工厂即可得到自己想要的产品。
对调用者屏蔽具体的产品类。如果使用工厂模式,调用者只关心产品的接口就可以了,至于具体的实现,调用者根本无需关心。
即使变更了具体的实现,对调用者来说没有任何影响。
降低耦合度。产品类的实例化通常来说是很复杂的,它需要依赖很多的类,而这些类对于调用者来说根本无需知道,如果使用了工厂方法,
我们需要做的仅仅是实例化好产品类,然后交给调用者使用。对调用者来说,产品所依赖的类都是透明的。
- 工厂模式:静态工厂
- 工厂模式-静态工厂
- 静态工厂方法模式
- 静态工厂模式
- 设计模式--静态工厂
- 静态工厂模式
- 静态工厂模式 理解
- 静态工厂设计模式
- 静态方法工厂模式
- 静态工厂模式
- 静态工厂模式
- 静态工厂模式
- 静态工厂模式
- 什么是静态工厂模式
- 设计模式-静态工厂
- 静态工厂模式(简单工厂模式)
- 简单工厂模式(静态工厂模式)
- 学习心得---简单工厂模式/静态工厂方法
- C++ 文件及文件夹操作(二)
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- 一个简单的广播Demo
- Spring 事务机制详解
- 函数与数组基础知识
- 静态工厂模式
- 论学习技术
- ubuntu14.04下使用conky
- Android 自定义背景文件,android:shape的用法
- WebView的简单用法
- flex-iframe移动,以及关闭问题
- CrossApp类结构图
- 网络连接错误提示
- Android基础笔记一