简单工厂模式:是由一个工厂对象决定创建出哪一种产品类的实例,简单工厂模式是工厂模式家族中最简单实用的模式。
目的:为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
它的组成:
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
以一个工厂生产电视和手机为例进行解释:
首先定义分别定义两个类代表电视和手机,并且都实现了work接口
1 interface work{
2 public void working();
3 }
4 class Phone implements work{
5
6 @Override
7 public void working() {
8 System.out.println("生产手机");
9 }
10
11 }
12 class Tv implements work{
13
14 @Override
15 public void working() {
16 System.out.println("生产电视");
17 }
18
19 }
接着如果想使用这两个类,可以用普通创建对象的方法
1 public class Test10 {
2
3 public static void main(String[] args) {
4 Phone phone=new Phone();
5 phone.working();
6
7 Tv tv=new Tv();
8 tv.working();
9 }
10
11 }
这样使用的不好处就是,如果Phone类和TV类一旦改变,就得改变上述代码,可以说类Test10依赖于Phone类和TV类,称这种依赖为耦合:使用者直接使用了具体类,表示当前类依赖该具体类。这样当这个具体类发生变化,使用者将受到影响。
为了降低这种影响,引入工厂模式:
增加一个工厂类
1 class Factory{
2 public static Work getWork(String product){
3 if("phone".equals(product)){
4 return new Phone();
5 }else if("tv".equals(product)){
6 return new Tv();
7 }
8 return null;
9 }
10 }
这样Test10类的代码就可以为:
1 public class Test10 {
2
3 public static void main(String[] args) {
4 //依赖接口
5 Work work=Factory.getWork("tv");
6 if(work!=null){
7 work.working();
8 }
9 }
10
11 }
这样它由依赖一个具体类转化为依赖接口,降低了耦合,体现了面向接口编程的思想。
这样具体类的变化不会影响到它。
这样写代码虽说和上述结果一样,但是可扩展性增强,维护性更强。
————————————————————————欢迎各位博友指出不足之处,多多交流。