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

java设计模式第12弹--工厂模式

2015-09-18 16:39 218 查看
一、工厂方法模式分为三种

1.简单工厂模式

2.普通工厂模式

3.抽象工厂模式

有些书中将1,2合并为一个模式,下面我们逐个介绍下这三个模式,个人觉得1,2是没有必要再细分的,合并为一个普通工厂模式也是极好的!!!

1.简单工厂模式

/***
* 接口类--创建两者的共同接口类
* @author 素剑步青尘
*
*/
public interface Sender {
public void send();
}


/***
* 创建实现类
* @author 素剑步青尘
*
*/
public class StudentSender implements Sender{

@Override
public void send() {
System.out.println("这是学生发送的信息");
}

}


public class TeacherSender implements Sender{

@Override
public void send() {
System.out.println("这是教师发送的信息");
}

}


/***
* 创建工厂类
* @author 素剑步青尘
*
*/
public class SenderFactory {

public Sender produce(String type){
switch (type) {
case "teacher":
return new TeacherSender();
case "student":
return new StudentSender();
default:
return null;
}
}

}


public class TestFactoryDemo {

/**创建测试类
* @param args
*/
public static void main(String[] args) {
SenderFactory sendFactory = new SenderFactory();
Sender sender =sendFactory.produce("teacher");

sender.send();
}

}


2.1普通工厂模式也是多个工厂方法模式,是对简单工厂方法模式的改进,在简单工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。

修改下工厂类就可以了,代码如下

/***
* 创建工厂类
* @author 素剑步青尘
*
*/
public class SenderFactory {

public Sender teacherSend(){
return new TeacherSender();
}

public Sender studentSend(){
return new StudentSender();
}

}


然后是测试类,改成如下
public class TestFactoryDemo {

/**
* @param args
*/
public static void main(String[] args) {
SenderFactory sendFactory = new SenderFactory();
Sender sender =sendFactory.teacherSend();

sender.send();
}

}


2.2,其实普通工厂模式里面还有一个就是静态工厂模式,其实就是他工厂类的方法加上static 调用的时候直接Class.method()就可以了,并没有什么,也贴下代码

/***
* 创建工厂类
* @author 素剑步青尘
*
*/
public class SenderFactory {

public static Sender teacherSend(){
return new TeacherSender();
}

public static Sender studentSend(){
return new StudentSender();
}

}


测试代码改成如下

public class TestFactoryDemo {

/**
* @param args
*/
public static void main(String[] args) {

Sender sender =SenderFactory.teacherSend();

sender.send();
}

}


总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。

3.抽象工厂模式

工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

public interface Sender {
public void send();

}


两个实现类

public class TeacherSender implements Sender{

@Override
public void send() {
System.out.println("这是教师发送的信息...");
}

}


public class StudentSender implements Sender{

@Override
public void send() {
System.out.println("这是学生发送的信息");
}

}


工厂的接口

public interface Provider {
public Sender produce();
}


工厂的两个实现类

public class StudentFactory implements Provider{

@Override
public Sender produce() {
return new StudentSender();
}

}


public class TeacherFactory implements Provider{

@Override
public Sender produce() {
return new TeacherSender();
}

}


测试代码

public class FactoryTest {

/**
* @param args
*/
public static void main(String[] args) {
Provider provider = new TeacherFactory();
Sender sender = provider.produce();
sender.send();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: