您的位置:首页 > 编程语言 > Java开发

Java模式—简单工厂模式

2015-07-28 22:36 274 查看
[b]简单工厂模式:是由一个工厂对象决定创建出哪一种产品类的实例,简单工厂模式是工厂模式家族中最简单实用的模式。[/b]

[b]目的:为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。[/b]

它的组成:

1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。

2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。

3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。


以一个工厂生产电视和手机为例进行解释:

首先定义分别定义两个类代表电视和手机,并且都实现了work接口

 1 interface work{
public void working();
}
class Phone implements work{

@Override
public void working() {
System.out.println("生产手机");
}

}
class Tv implements work{

@Override
public void working() {
System.out.println("生产电视");
}

}


接着如果想使用这两个类,可以用普通创建对象的方法

 1 public class Test10 {

public static void main(String[] args) {
Phone phone=new Phone();
phone.working();

Tv tv=new Tv();
tv.working();
}

}


这样使用的不好处就是,如果Phone类和TV类一旦改变,就得改变上述代码,可以说类Test10依赖于Phone类和TV类,称这种依赖为[b]耦合:使用者直接使用了具体类,表示当前类依赖该具体类。这样当这个具体类发生变化,使用者将受到影响。[/b]

[b]为了降低这种影响,引入工厂模式:[/b]

增加一个工厂类

 1 class Factory{
public static Work getWork(String product){
if("phone".equals(product)){
return new Phone();
}else if("tv".equals(product)){
return new Tv();
}
return null;
}
}


这样Test10类的代码就可以为:

 1 public class Test10 {

public static void main(String[] args) {
//依赖接口
Work work=Factory.getWork("tv");
if(work!=null){
work.working();
}
}

}


这样它由依赖一个具体类转化为依赖接口,降低了耦合,体现了面向接口编程的思想。

这样具体类的变化不会影响到它。

这样写代码虽说和上述结果一样,但是可扩展性增强,维护性更强。

————————————————————————欢迎各位博友指出不足之处,多多交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: