工厂方法模式的困惑

dlhansy 2015-07-24 09:52:43
简单工厂模式可以理解,把创建某一类产品的过程封装到工厂类的一个方法中,通过条件分支创建不同的具体产品。
但是工厂方法每一个产品产品类对应一个工厂类,创建产品需要先创建对应的工厂类。
这样做好处是什么?如何创建不同的具体工厂呢?还是用条件分支?
...全文
197 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dlhansy 2015-07-27
  • 打赏
  • 举报
回复
请大神帮帮忙,多谢啦。
dlhansy 2015-07-24
  • 打赏
  • 举报
回复
可能是我没说清楚,几个例子: 工厂抽象类:

public abstract class SenderFactory {
	public abstract Sender createSender();
}
Email工厂类:

public class EmailSenderFactory extends SenderFactory {

	@Override
	public Sender createSender() {
		return new EmailSender();
	}
}
其他工厂类省略 产品是发送器,发送器抽象类:

public interface Sender {
	void sendMsg(String msg);
}
Email发送器:

public class EmailSender implements Sender {

	@Override
	public void sendMsg(String msg) {
		System.out.println("email send work:" + msg);
	}

}
学生类:

public class Student {
	public void sendMsg(SenderFactory factory, String msg) {
		factory.createSender().sendMsg(msg);
	}
}
客户端类:

public class Main {
	public static void main(String[] args) {
		Student student = new Student();
		student.sendMsg(new EmailSenderFactory(), "Java");
		student.sendMsg(new SmsSenderFactory(), "C++");
	}
}

客户端具体操作时还是面临选择哪个发送工厂的问题,与使用简单工厂模式时面临选择哪个Sender是一样的。 使用工厂方法有什么好处呢?
飏飏一蝶 2015-07-24
  • 打赏
  • 举报
回复
根据实际需求,既然是子类当然是在父类基础上的具体化。
dlhansy 2015-07-24
  • 打赏
  • 举报
回复
谢谢回复,还有问题请教: 创建具体产品之前需要创建该产品的工厂类是吧,这是如何创建的呢?根据什么创建不同的具体工厂类?
飏飏一蝶 2015-07-24
  • 打赏
  • 举报
回复
工厂方法是在抽象工厂类中实现了获取对象的接口,由子类来延迟实现。继承抽象工厂类并实现工厂方法,这样做可以对于未来所有未知的子类产品提供接口。个人理解。不要条件分支,一般简单工厂模式才用。

50,639

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧