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

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了,无需去改动现成的代码。这样做,拓展性较好!

原文地址:https://www.cnblogs.com/keyiei/p/3593047.html