工厂模式之工厂方法模式
2015-08-12 14:29
120 查看
先看代码:
publicinterface Product
{
publicvoid getName();
}
publicclass AProduct implements Product{
publicvoid getName()
{
System.out.println("I
am product A");
}
}
publicclass BProduct implements Product{
publicvoid getName()
{
System.out.println("I
am product B");
}
}
publicinterface IFactory
{
Product createProduct();
}
publicclass AFactory implements IFactory{
public Product
createProduct() {
returnnew AProduct();
}
}
publicclass BFactory implements IFactory{
public Product
createProduct() {
returnnew BProduct();
}
}
publicclass Test
{
publicstaticvoid main(String
[]args){
IFactory
iFactory = new AFactory();
Product product = iFactory.createProduct();
product.getName();
iFactory
= new BFactory();
product = iFactory.createProduct();
product.getName();
}
}
如果后来增加一类产品C,只需要增加一个C的工厂(CFactory类)和一个C产品的实现类(CProduct类),不过要修改客户端的代码,根据实际情况使用new AFactory()还是new BFactory()等等。
工厂方法模式优点:
每个工厂类对应一个对象的实现类,但需要客户端判断创建哪个工厂类实例,需求变化时,工厂类无需改变,但客户端需要修改。
简单工厂模式优点:
工厂类中包含必要的逻辑判断,客户端只需传递相应的参数便可得到想要的对象的实例化,在需求变化时,只需要修改工厂类,增加额外判断,客户端基本不用修改。
publicinterface Product
{
publicvoid getName();
}
publicclass AProduct implements Product{
publicvoid getName()
{
System.out.println("I
am product A");
}
}
publicclass BProduct implements Product{
publicvoid getName()
{
System.out.println("I
am product B");
}
}
publicinterface IFactory
{
Product createProduct();
}
publicclass AFactory implements IFactory{
public Product
createProduct() {
returnnew AProduct();
}
}
publicclass BFactory implements IFactory{
public Product
createProduct() {
returnnew BProduct();
}
}
publicclass Test
{
publicstaticvoid main(String
[]args){
IFactory
iFactory = new AFactory();
Product product = iFactory.createProduct();
product.getName();
iFactory
= new BFactory();
product = iFactory.createProduct();
product.getName();
}
}
如果后来增加一类产品C,只需要增加一个C的工厂(CFactory类)和一个C产品的实现类(CProduct类),不过要修改客户端的代码,根据实际情况使用new AFactory()还是new BFactory()等等。
工厂方法模式优点:
每个工厂类对应一个对象的实现类,但需要客户端判断创建哪个工厂类实例,需求变化时,工厂类无需改变,但客户端需要修改。
简单工厂模式优点:
工厂类中包含必要的逻辑判断,客户端只需传递相应的参数便可得到想要的对象的实例化,在需求变化时,只需要修改工厂类,增加额外判断,客户端基本不用修改。
相关文章推荐
- UIAutomation使用测试入门
- lucene学习001
- 为已经存在的TFS团队项目配置SharePoint集成
- ORM和Hibernate的配置方式
- jQuery
- android UI进阶之用ViewPager实现欢迎引导页面
- storm记录--7-- Maven安装使用
- 音频文件播放之音量控制【海思平台】
- 程序员保值的五个关键点
- VBA学习笔记
- 黑马程序员-----------------java基础-----------------多线程
- JSONArray和JSONObject的简单使用
- MYSQL自定义排序
- jQuery_统计图插件-Prototype Javascript Framework
- hdu1671(trie树(字典树))
- 驱动程序如何手动卸载与更新
- 【大创_社区划分】——PageRank算法的解析与Python实现
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法实现边缘检测代码(2)
- 状态模式
- 欢迎使用CSDN-markdown编辑器