总体来说设计模式分为三大类:
(1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
(2)结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
(3)行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
工厂方法模式
工厂方法模式分为三种:普通工厂模式、多个工厂方法模式和静态工厂方法模式。
3.1.1、普通工厂模式
普通工厂模式就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
1
2
3
4
5
|
package
com.mode.create;
public
interface
MyInterface {
public
void
print();
}
|
1
2
3
4
5
6
7
8
9
10
|
package
com.mode.create;
public
class
MyClassOne
implements
MyInterface {
@Override
public
void
print() {
System.out.println(
"MyClassOne"
);
}
}
|
1
2
3
4
5
6
7
8
9
10
|
package
com.mode.create;
public
class
MyClassTwo
implements
MyInterface {
@Override
public
void
print() {
System.out.println(
"MyClassTwo"
);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package
com.mode.create;
public
class
MyFactory {
public
MyInterface produce(String type) {
if
(
"One"
.equals(type)) {
return
new
MyClassOne();
}
else
if
(
"Two"
.equals(type)) {
return
new
MyClassTwo();
}
else
{
System.out.println(
"没有要找的类型"
);
return
null
;
}
}
}
|
1
2
3
4
5
6
7
8
9
10
11
|
package
com.mode.create;
public
class
FactoryTest {
public
static
void
main(String[] args){
MyFactory factory =
new
MyFactory();
MyInterface myi = factory.produce(
"One"
);
myi.print();
}
}
|
FactoryTest的运行结果我想应该很明显了。
再回头来理解这句话:普通工厂模式就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
3.1.2、多个工厂方法模式
多个工厂方法模式,是对普通工厂方法模式的改进,多个工厂方法模式就是提供多个工厂方法,分别创建对象。
直接看代码吧,我们修改MyFactory和FactoryTest如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package
com.mode.create;
public
class
MyFactory {
public
MyInterface produceOne() {
return
new
MyClassOne();
}
public
MyInterface produceTwo() {
return
new
MyClassTwo();
}
}
|
1
2
3
4
5
6
7
8
9
10
11
|
package
com.mode.create;
public
class
FactoryTest {
public
static
void
main(String[] args){
MyFactory factory =
new
MyFactory();
MyInterface myi = factory.produceOne();
myi.print();
}
}
|
运行结果也是十分明显了。
再回头来理解这句话:多个工厂方法模式,是对普通工厂方法模式的改进,多个工厂方法模式就是提供多个工厂方法,分别创建对象。
3.1.3、静态工厂方法模式
静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
直接看代码吧,我们修改MyFactory和FactoryTest如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package
com.mode.create;
public
class
MyFactory {
public
static
MyInterface produceOne() {
return
new
MyClassOne();
}
public
static
MyInterface produceTwo() {
return
new
MyClassTwo();
}
}
|
1
2
3
4
5
6
7
8
9
10
|
package
com.mode.create;
public
class
FactoryTest {
public
static
void
main(String[] args){
MyInterface myi = MyFactory.produceOne();
myi.print();
}
}
|
运行结果依旧很明显。
再回顾:静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。