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

Java 23种设计模式之简单工厂模式

2017-12-03 21:30 507 查看

1. 概念

就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。简单工厂模式的实质
是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个
父类或接口)的实例。


2. 创建父类接口

public interface ISender {
void send(); //发送方法
}


3. 创建产品类实现父类接口

1.产品一
public class QQSender implements ISender{
@Override
public void send() {
System.out.println("QQSender send");
}
}

2.产品二
public class SmsSender implements ISender{
@Override
public void send() {
System.out.println("SmsSender send");
}
}

3.产品三
public class EmailSender implements ISender{
@Override
public void send() {
System.out.println("EmailSender send");
}
}


4. 创建工厂类,用工厂类创建产品对象

1.实现方式一  普通工厂
public class CommonFactory1{

public ISender produce(String type){
ISender sender;
switch (type){
case "sms":
sender = new SmsSender();
break;
case "qq":
sender = new QQSender();
break;
case "email":
sender = new EmailSender();
break;
default:
sender = null;
System.out.println("produce 类型匹配");
break;
}
return sender;
}
}

2.实现方式二 多个工厂
public class MultiFactory{

public ISender produceSms(){
return new SmsSender();
}

public ISender produceEmail(){
return new EmailSender();
}

public ISender produceQQ(){
return new QQSender();
}
}

2.实现方式二 静态工厂
public class StaticFactory{

public static ISender produceSms(){
return new SmsSender();
}

public static ISender produceEmail(){
return new EmailSender();
}

public static ISender produceQQ(){
return new QQSender();
}
}


5. 测试类

public class FactoryTest {

@Test
public void test1(){
SenderFactory factory = new SenderFactory();
ISender sender = factory.produce("qq");
if(sender!=null){
sender.send();
}
}

@Test
public void test2(){
MultiFactory factory = new MultiFactory();
ISender sender = factory.produceSms();
sender.send();
}

@Test
public void test3(){
StaticFactory. produceEmail().send();
}

}


6.小结

优:
工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,
决定究竟应该创建哪个具体类的对象.

缺:
违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;
它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: