java 工厂模式小结
2013-11-07 09:16
337 查看
在项目开发过程中会比较经常遇到工厂模式。
1.不使用工厂模块的例子:
interface Printer{
public void open();
public void close();
public void print(String s);
}
class DEPrinter implements Printer{
public void open(){
System.out.println(" HPPrinter open");
}
public void close(){
this.clear();
System.out.println(" HPPrinter close");
}
public void clear(){
System.out.println(" HPPrinter clear");
}
public void print(String s){
System.out.println(" HPPrinter print" + s);
}
}
class HPPrinter implements Printer{
public void open(){
System.out.println(" HPPrinter open");
}
public void close(){
System.out.println(" HPPrinter close");
}
public void print(String s){
System.out.println(" HPPrinter print" + s);
}
}
class Test{
public static void main(String args[]){
//根据用户的选择,生成相应的打印机对象,并且向上转型为Printer类型
int flag = 0;
Printer printer = null;
if(flag == 0){
printer = new HPPrinter();
}else if(flag == 1){
printer = new DEPrinter();
}
printer.open();
printer.print("打印");
printer.close();
}
}
2.工厂模式实现
interface Printer{
public void open();
public void close();
public void print(String s);
}
class DEPrinter implements Printer{
public void open(){
System.out.println(" HPPrinter open");
}
public void close(){
this.clear();
System.out.println(" HPPrinter close");
}
public void clear(){
System.out.println(" HPPrinter clear");
}
public void print(String s){
System.out.println(" HPPrinter print" + s);
}
}
class HPPrinter implements Printer{
public void open(){
System.out.println(" HPPrinter open");
}
public void close(){
System.out.println(" HPPrinter close");
}
public void print(String s){
System.out.println(" HPPrinter print" + s);
}
}
/**
*工厂类
*/
class PrinterFactory{
public static Printer getPrinter(int flag){
Printer printer = null;
//向上转型为Printer类型
if(flag == 0){
printer = new HPPrinter();
}else if(flag == 1){
printer = new DEPrinter();
}
return printer;
}
}
class Test{
public static void main(String args[]){
//根据用户的选择,生成相应的打印机对象,并且向上转型为Printer类型
//Printer getPrinter(int flag);
// int flag = 0;
//Printer printer = null;
//if(flag == 0){
// printer = new HPPrinter();
//}else if(flag == 1){
// printer = new DEPrinter();
//}
int flag = 0;
//利用工厂类返回一个类对象,在工厂类里面向上转型成Printer父类。
Printer printer = PrinterFactory.getPrinter(flag);
printer.open();
printer.print("打印");
printer.close();
}
}
3.总结:
1)工厂模式主要是用来返回一个对象,把new对象的方法,封装到工厂类里面。
2)在工厂类当中返回由一个具体子类对象向上转型之后的父类对象,这个父类对象就可以由调用者直接使用。
3)使用工程模式的话可以实现当有多个子类且需要修改接口里面的某个方法时候,需要对多个子类进行修改,这样我们只要对工厂类的修改就可以,而不用一个个去修改子类,避免在某处子类遗漏修改。
1.不使用工厂模块的例子:
interface Printer{
public void open();
public void close();
public void print(String s);
}
class DEPrinter implements Printer{
public void open(){
System.out.println(" HPPrinter open");
}
public void close(){
this.clear();
System.out.println(" HPPrinter close");
}
public void clear(){
System.out.println(" HPPrinter clear");
}
public void print(String s){
System.out.println(" HPPrinter print" + s);
}
}
class HPPrinter implements Printer{
public void open(){
System.out.println(" HPPrinter open");
}
public void close(){
System.out.println(" HPPrinter close");
}
public void print(String s){
System.out.println(" HPPrinter print" + s);
}
}
class Test{
public static void main(String args[]){
//根据用户的选择,生成相应的打印机对象,并且向上转型为Printer类型
int flag = 0;
Printer printer = null;
if(flag == 0){
printer = new HPPrinter();
}else if(flag == 1){
printer = new DEPrinter();
}
printer.open();
printer.print("打印");
printer.close();
}
}
2.工厂模式实现
interface Printer{
public void open();
public void close();
public void print(String s);
}
class DEPrinter implements Printer{
public void open(){
System.out.println(" HPPrinter open");
}
public void close(){
this.clear();
System.out.println(" HPPrinter close");
}
public void clear(){
System.out.println(" HPPrinter clear");
}
public void print(String s){
System.out.println(" HPPrinter print" + s);
}
}
class HPPrinter implements Printer{
public void open(){
System.out.println(" HPPrinter open");
}
public void close(){
System.out.println(" HPPrinter close");
}
public void print(String s){
System.out.println(" HPPrinter print" + s);
}
}
/**
*工厂类
*/
class PrinterFactory{
public static Printer getPrinter(int flag){
Printer printer = null;
//向上转型为Printer类型
if(flag == 0){
printer = new HPPrinter();
}else if(flag == 1){
printer = new DEPrinter();
}
return printer;
}
}
class Test{
public static void main(String args[]){
//根据用户的选择,生成相应的打印机对象,并且向上转型为Printer类型
//Printer getPrinter(int flag);
// int flag = 0;
//Printer printer = null;
//if(flag == 0){
// printer = new HPPrinter();
//}else if(flag == 1){
// printer = new DEPrinter();
//}
int flag = 0;
//利用工厂类返回一个类对象,在工厂类里面向上转型成Printer父类。
Printer printer = PrinterFactory.getPrinter(flag);
printer.open();
printer.print("打印");
printer.close();
}
}
3.总结:
1)工厂模式主要是用来返回一个对象,把new对象的方法,封装到工厂类里面。
2)在工厂类当中返回由一个具体子类对象向上转型之后的父类对象,这个父类对象就可以由调用者直接使用。
3)使用工程模式的话可以实现当有多个子类且需要修改接口里面的某个方法时候,需要对多个子类进行修改,这样我们只要对工厂类的修改就可以,而不用一个个去修改子类,避免在某处子类遗漏修改。
相关文章推荐
- java.text包
- Java出现No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing
- Myeclipse连接MySQL数据库经验分享 .
- java_多线程
- JDK中设计模式
- Java String.indexOf(String str)方法
- java学习路线
- 开源 免费 java CMS - FreeCMS1.5 标签 infoNextList
- java代码输出质因数
- java包命名
- Java生成随机长度指定密码
- java.lang.ThreadGroup
- 【Java学习之一】Eclipse断点调试
- Java正则表达式应用总结
- java代码分解质因数
- 将带图片的Java工程用eclipse打包成jar,然后用exe4j将jar打包成exe,并附带jre库
- java中的equals和hashCode方法以及集合的排序
- Spring 事物管理
- Java中 封 装与隐藏
- java.lang.ClassNotFoundException: org.logicalcobwebs.proxool.ProxoolDataSource