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