工厂模式-三种类型

来源:互联网 发布:ubuntu相连设备ip 编辑:程序博客网 时间:2024/05/29 07:52

1.普通工厂模式

可以封装不同的实现,统一为一个方法,但是需要传不同的参数。使得程序容易维护和扩展。

Test.java

package cn.test.factorymethod;public class Test {public static void main(String[] args) {//实例化工厂Factory factory = new Factory();Print print = factory.createWindow("HP");print.print();Print print2 = factory.createWindow("EPSON");print2.print();}}

Factory.java

package cn.test.factorymethod;public class Factory {      public Print createWindow (String type) {        if(type.equals("HP")) {            return new PrintHP();        } else if(type.equals("EPSON")) {            return new PrintEPSON();        } else{        return new PrintHP();        }    }    }
Print.java

package cn.test.factorymethod;public abstract class Print {    public abstract void print();    }
PrintEPSON.java

package cn.test.factorymethod;public class PrintEPSON extends Print {        @Override    public void print() {        System.out.println("I'm EPSON");    }}
PrintHP.java

package cn.test.factorymethod;public class PrintHP extends Print {    @Overridepublic void print() { System.out.println("I'm HP");}}

返回结果:

I'm EPSON
I'm HP

2.多个工厂模式

在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象

修改Factory.java类如下:

package cn.test.factorymethod;public class Factory {    public Print epson(){  return new PrintEPSON();  }   public Print hp(){  return new PrintHP();  }    }
修改Test.java类如下:


package cn.test.factorymethod;public class Test {public static void main(String[] args) {// 实例化工厂Factory factory = new Factory();Print print = factory.epson();print.print();Print print2 = factory.hp();print2.print();}}

返回结果:

I'm EPSON
I'm HP

3.静态工厂模式

将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

修改Factory.java类如下:

package cn.test.factorymethod;public class Factory {    public static Print epson(){  return new PrintEPSON();  }   public static Print hp(){  return new PrintHP();  }    }


修改Test.java类如下:

package cn.test.factorymethod;public class Test {public static void main(String[] args) {Print print = Factory.epson();print.print();Print print2 = Factory.hp();print2.print();}}

返回结果:

I'm EPSON
I'm HP




1 0
原创粉丝点击