来自:http://www.cnblogs.com/LIANQQ/p/3582915.html
简单工厂模式的作用就是定义一个用于创建对象的接口
在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化。
先来看看它的组成:
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
首先定义一个接口
/** * @author ieasy360_1 * 定义一个接口 */ public interface Sender{ public void send(); }
创建类实现Sender接口
public class Qq implements Sender{ @Override public void send() { // TODO Auto-generated method stu System.out.println("this is qq send!"); } }
public class Weixin implements Sender { @Override public void send() { // TODO Auto-generated method stub System.out.println("this is Weixin send!"); } }
创建一个工厂类
/** * @author ieasy360_1 * 工厂类 */ public class SenderFactory { public Sender sendproduce(String type) { if(type.equals("qq")) { return new Qq(); } else if(type.equals("wx")) { return new Weixin(); } else { return null; } } }
具体用法
/** * @author ieasy360_1 * */ public class Test1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SenderFactory factory = new SenderFactory(); Sender sender = factory.sendproduce("qq"); sender.send(); } }
运行得到的结果
this is qq send!
接着上篇文章的简单工厂模式,做以下修改,即可实现多个工厂方法模式
/** * @author ieasy360_1 * 工厂类 */ public class SenderFactory { // public Sender sendproduce(String type) // { // if(type.equals("qq")) // { // return new Qq(); // } // else if(type.equals("wx")) // { // return new Weixin(); // } // else // { // return null; // } // } public Sender qqsend() { return new Qq(); } public static Sender weixinsend() { return new Weixin(); } }
具体调用,一个是采用静态方法调用
/** * @author ieasy360_1 * */ public class Test1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SenderFactory factory = new SenderFactory(); Sender sender = factory.qqsend(); sender.send();
Sender sender1 = SenderFactory.weixinsend();
sender1.send();
}
}