设计模式-工厂模式

工厂模式

定义一个用于创建对象的接口,让子类决定实例化哪个类,工厂方法使一个类的实例化延迟到其子类。

提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。

工厂模式结构图

1.简单工厂方法

1
2
3
4
5
6
7
8
9
10
11
12
13
//创建工厂
public class Factory{
public static ISample creator(int which){
if (which==1)
return new SampleA();
else if (which==2)
return new SampleB();
}
}

//创建实例时
ISample sampleA = Factory.creator(1);
ISample sampleA = Factory.creator(2);

2.抽象工厂

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//创建一个工厂接口
public abstract class Factory{
public abstract Sample creator();
public abstract Sample2 creator(String name);
}
//创建实现接口的实体类
public class SimpleFactory extends Factory{
public Sample creator(){
.........
return new SampleA
}
public Sample2 creator(String name){
.........
return new Sample2A
}
}
//创建工厂

public class BombFactory extends Factory{
public Sample creator(){
......
return new SampleB
}
public Sample2 creator(String name){
......
return new Sample2B
}
}

优点

1、可以一定程度上解耦,消费者和产品实现类隔离开,只依赖产品接口(抽象产品),产品实现类如何改动与消费者完全无关。

2、可以一定程度增加扩展性,若增加一个产品实现,只需要实现产品接口,修改工厂创建产品的方法,消费者可以无感知(若消费者不关心具体产品是什么的情况)。
3、可以一定程度增加代码的封装性、可读性。清楚的代码结构,对于消费者来说很少的代码量就可以完成很多工作。

缺点

每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖

应用场景

1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。

2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。

3、设计一个连接服务器的框架,需要三个议,”POP3”、”IMAP”、”HTTP”,可以把这三个作为产品类,共同实现一个接口。

文章目录
  1. 1. 工厂模式
    1. 1.1. 1.简单工厂方法
    2. 1.2. 2.抽象工厂
    3. 1.3. 优点
    4. 1.4. 缺点
    5. 1.5. 应用场景
| 139.6k