Java设计模式——工厂
简单工厂
简单工厂模式就是定义一个接口,写共性的方法,做具体不同的事,就像发QQ,发微信,都是发送东西,但是发送是不同的软件
步骤:
1.定义接口,
2.创建各自子类实现接口,重写方法,坐各自的事;
3.创建工厂类
4.调用时候通过调用方法时候,传递的参数不同返回不同实现类的对象
优缺点:
不利于扩展,扩展需要改工程类代码,传递的参数找不到匹配会很尴尬;
代码:
//创建接口
public interface ISender {
void send();
}
//创建QQ具体类实现接口
public class SendQQ implements ISender {
@Override
public void send() {
Log.e(TAG, "发QQ " );
}
}
//创建微信具体类实现接口
public class SendWeChat implements ISender {
@Override
public void send() {
Log.e(TAG, "发微信消息" );
}
}
//创建工厂类
public class SendFactory {
// 简单的工厂
public ISender sendMessage(String s) {
if ("QQ".equals(s)) {
return new SendQQ();
} else if ("WeChat".equals(s)) {
return new SendWeChat();
}
return null;
}
//调用
SendFactory sendFactory = new SendFactory();
sendFactory.sendMessage("QQ");
多个工厂
多个工厂和简单工厂的区别就在工厂类不是按调用方法传递来的参数匹配,而是写多个方法,直接返回对应的实现类对象
@Override
public class SendFactory {
public ISender sendQQMessage(){
return new SendQQ();
}
public ISender senWeChat(){
return new SendWeChat();
}
}
这样的缺点依然很明显,就是新增加实现类需要改工厂类的代码;
静态工厂
静态工厂就是上面的方法增加static 修饰,这样比起多个工厂好处就在不用创建对象,直接类名调用
@Override
public class SendFactory {
public static ISender sendQQMessage(){
return new SendQQ();
}
public static ISender senWeChat(){
return new SendWeChat();
}
}
抽象工厂
抽象工厂的实现就是增加了一个接口,创建不同的工厂来实现这个接口。这样的好处就是扩展,不用去改工厂类的代码。直接增加工厂类实现这个接口就好
//工厂接口 你应该思考,这个接口为什么要定义,因为他们有共性,都是发送东西,具有发送功能,所以接口定义一个make方法,类型是发送类型就是发送不同东西共性的类型
public interface IProvider {
ISender make();
}
```java
QQ发送工厂
public class SendQQFactory implements IProvider {
@Override
public ISender make() {
return new SendQQ();
}
}
微信发送工厂
public class SendWeChatFactory implements IProvider {
@Override
public ISender make() {
return new SendWeChat();
}
}
//调用的时候直接
//抽象工厂的调用
new SendQQFactory().make();