第一种:普通工厂
第二种:多个工厂
第三种:静态工厂
①普通工厂
package com.dasenlin.factory;
/**
* 工厂模式普通工厂
* @author Administrator
*
*/
public class OrdinaryFactory {
public static void main(String[] args) {
SendFactory factory =new SendFactory();
Sender sender=factory.produce("mail");
sender.send();
}
}
/**
* 共同的接口
* @author Administrator
*
*/
interface Sender{
public void send();
}
/**
* 实现的邮箱发送
* @author Administrator
*
*/
class MailSender implements Sender{
@Override
public void send() {
System.out.println("我是邮箱发送的数据de实现");
}
}
/**
* 实现的Msn发送
* @author Administrator
*
*/
class MsnSender implements Sender{
@Override
public void send() {
System.out.println("我是MSN发送的数据de实现");
}
}
/**
* 创建工厂
* @author Administrator
*
*/
class SendFactory{
public Sender produce(String type){
if("mail".equals(type)){
return new MailSender();
}else if("msn".equals(type)){
return new MsnSender();
}else{
System.out.println("请输入正确的发送类型");
return null;
}
}
}
②多个工厂
package com.dasenlin.factory;
/**
* 多个工厂,修改下工厂类就可以了
* @author Administrator
*
*/
public class ManyFactory {
public static void main(String[] args) {
SendFactory2 product2 =new SendFactory2();
Sender2 sender2=product2.qqSenderProduce();
sender2.send();
Sender2 sender =product2.weixinSenderProduce();
sender.send();
}
}
/**
* 发送的接口
* @author Administrator
*
*/
interface Sender2{
public void send();
}
/**
* QQ发送的实现类
* @author Administrator
*
*/
class QQSender implements Sender2{
@Override
public void send() {
System.out.println("QQ");
}
}
/**
* 微信发送的实现类
* @author Administrator
*
*/
class WeixinSender implements Sender2{
@Override
public void send() {
System.out.println("WeiXin");
}
}
/**
* 工厂发射类中的多个工厂
*/
class SendFactory2{
/**
* qq发射工厂
* @return
*/
public Sender2 qqSenderProduce(){
return new QQSender();
}
public Sender2 weixinSenderProduce(){
return new WeixinSender();
}
}
③静态工厂
package com.dasenlin.factory;
/**
* 静态工厂方法模式,是在多个工厂方法的基础上,添加为静态方法,可以直接调用而无需实例化
* @author Administrator
*工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。
*在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,
*所以,大多数情况下,我们会选用第三种——静态工厂方法模式。
*/
public class StaticFactory {
public static void main(String[] args) {
Sender3 sender3=SendFactory3.qqSenderProduce();
sender3.send();
}
}
/**
* 发送的接口
* @author Administrator
*
*/
interface Sender3{
public void send();
}
/**
* QQ发送的实现类
* @author Administrator
*
*/
class QQSender2 implements Sender3{
@Override
public void send() {
System.out.println("QQ");
}
}
/**
* 微信发送的实现类
* @author Administrator
*
*/
class WeixinSender2 implements Sender3{
@Override
public void send() {
System.out.println("WeiXin");
}
}
/**
* 工厂发射类中的多个工厂
*/
class SendFactory3{
/**
* qq发射工厂
* @return
*/
public static Sender3 qqSenderProduce(){
return new QQSender2();//再建一个工厂的话,则需要在修改工厂类,违背了闭包原则
}
public static Sender3 weixinSenderProduce(){
return new WeixinSender2();
}
}
java设计模式,工厂模式
最新推荐文章于 2024-04-20 16:25:45 发布