1.工厂模式
工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。
例子:
每个程序员都有自己擅长的语言,假如一个项目的开发语言是Java,
这时项目经理就会到人力资源部门申请擅长Java的程序员。
程序员接口定义
1 public interface Programmer {
2 public void sayHello ();
3 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
2 public Programmer getProgrammer();
3 }
抽象工厂模式工厂类的定义
1 public class JavaProgrammerFactory implements Provider {
2 @Override
3 public Programmer getProgrammer() {
4 return new JavaProgrammer();
5 }
6 }
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 }
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 }
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了,无需去改动现成的代码。这样做,拓展性较好!