您的位置:首页 > 其它

常见的设计模式 ----- 工厂模式

2014-03-11 00:19 507 查看
1.工厂模式

工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。

例子:

每个程序员都有自己擅长的语言,假如一个项目的开发语言是Java,

这时项目经理就会到人力资源部门申请擅长Java的程序员。

程序员接口定义

1 public interface Programmer {
2 public void sayHello ();
3 }JAVA程序员实现类

1 public class JavaProgrammer implements Programmer {
2 @Override
3 public void sayHello() {
4 System.out.println("I'm a JavaProgrammer.");
5 }
6 }PHP程序员实现类

1 public class PhpProgrammer implements Programmer {
2 public void sayHello() {
3 System.out.println("I'm a PhpProgrammer.");
4 }
5 }

(1.1)普通工厂模式

普通工厂模式工厂类的定义

1 public class ProgrammerFactory {
2 final static String JAVA = "Java";
3 final static String PHP = "php";
4
5 public Programmer findProgrammer (String kind){
6 if (JAVA.equals(kind)) {
7 return new JavaProgrammer();
8 } else if (PHP.equals(kind)) {
9 return new PhpProgrammer();
10 } else {
11 return null;
12 }
13 }
14 }使用方法:

1 /**
2 * @普通工厂模式
3 */
4 public static void main(String[] args) {
5 ProgrammerFactory factory = new ProgrammerFactory();
6 Programmer pg = factory.findProgrammer(ProgrammerFactory.JAVA);
7 pg.sayHello();
8 }

(1.2)多个工厂模式

多个工厂模式工厂类的定义

1 public class ProgrammerFactory {
2
3 public Programmer getJavaProgrammer() {
4 return new JavaProgrammer();
5 }
6
7 public Programmer getPhpProgrammer() {
8 return new PhpProgrammer();
9 }
10
11 }

使用方法:

1 /**
2 * @多个工厂方法模式
3 */
4 public static void main(String[] args) {
5 ProgrammerFactory factory = new ProgrammerFactory();
6 Programmer pg = factory.getPhpProgrammer();
7 pg.sayHello();
8 }

(1.3)静态工厂模式

将多个工厂模式的工厂方法加上静态属性。

静态工厂模式工厂类的定义

1 public class ProgrammerFactory {
2
3 public static Programmer getJavaProgrammer() {
4 return new JavaProgrammer();
5 }
6
7 public static Programmer getPhpProgrammer() {
8 return new PhpProgrammer();
9 }
10
11 }使用方法:

1 /**
2 * @静态工厂方法模式
3 */
4 public static void main(String[] args) {
5 Programmer pg = ProgrammerFactory.getJavaProgrammer();
6 pg.sayHello();
7 }

(1.4)抽象工厂模式

为工厂类抽出一个共同接口

1 public interface Provider {
2 public Programmer getProgrammer();
3 }抽象工厂模式工厂类的定义

1 public class JavaProgrammerFactory implements Provider {
2 @Override
3 public Programmer getProgrammer() {
4 return new JavaProgrammer();
5 }
6 }

1 public class PhpProgrammerFactory implements Provider {
2 @Override
3 public Programmer getProgrammer() {
4 return new PhpProgrammer();
5 }
6 }使用方法:

1 /**
2 * @抽象工厂方法模式
3 */
4 public static void main(String[] args) {
5 Provider provider = new JavaProgrammerFactory();
6 Programmer pg = provider.getProgrammer();
7 pg.sayHello();
8 }这个模式的好处是,如果你现在想增加一门语言的程序员,则只需做一个实现类,实现Programmer接口,同时做一个工厂类,实现Provider接口,就OK了,无需去改动现成的代码。这样做,拓展性较好!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: