设计模式第二节:Factory Method(工厂方法)
2016-05-27 16:09
597 查看
普及一下java的常识:1: 一个接口可以继承一个或者多个接口,但不能去实现它或者它们,因为实现它或者它们,就要把接口中的抽象实现,这样的话就会与接口的概念相反。2:抽象类可以继承抽象类也可以实现接口,但是都不用实现它们的抽象方法。看图更加形象:
![](https://img-blog.csdn.net/20160527161634169?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
1.描述:工厂方法属于创建型
2.模式结构图:
![](https://img-blog.csdn.net/20160527171849670?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3.理解:
具体对象(Product)的实现移动到子类(ConcreteProductA)中实现。因为面对不同的子类实现,如果单单使用一个工厂方法是不能满足要求的,所以提取工厂方法抽象类(Creator)。并添加不同的实现对Creator。在使用不同的具体对象时(ConfreteProductA/ConfreteProductB),只需调用不同的工厂方法实现就可以(ConcreteCreateA/ConcreteCreateB)。工厂方法提供了统一的工厂方法接口factorMethod()。
4:例子:
产品类的抽象类:
public abstract class Water {
public Water(){}
public abstract void judgeLevel();
}
抽象类的具体实现;
public class LifeWater extends Water{
@Override
public void judgeLevel() {
// TODO Auto-generated method stub
System.out.println("等级:"+6);
}
}
工厂方法:
public abstract class Creator {
public abstract Water factoryMethod();
public Water getObject()
{
Water w=factoryMethod();
return w;
}
}
public class ConcreteCreator extends Creator{
@Override
public Water factoryMethod() {
// TODO Auto-generated method stub
Water w;
w=new LifeWater();
return w;
}
}
下面是如何调用上述代码,得到想要产品类的实现:
Water w;
Creator c=ConcreteCreator ();
w=c.getObject();
1.描述:工厂方法属于创建型
2.模式结构图:
3.理解:
具体对象(Product)的实现移动到子类(ConcreteProductA)中实现。因为面对不同的子类实现,如果单单使用一个工厂方法是不能满足要求的,所以提取工厂方法抽象类(Creator)。并添加不同的实现对Creator。在使用不同的具体对象时(ConfreteProductA/ConfreteProductB),只需调用不同的工厂方法实现就可以(ConcreteCreateA/ConcreteCreateB)。工厂方法提供了统一的工厂方法接口factorMethod()。
4:例子:
产品类的抽象类:
public abstract class Water {
public Water(){}
public abstract void judgeLevel();
}
抽象类的具体实现;
public class LifeWater extends Water{
@Override
public void judgeLevel() {
// TODO Auto-generated method stub
System.out.println("等级:"+6);
}
}
工厂方法:
public abstract class Creator {
public abstract Water factoryMethod();
public Water getObject()
{
Water w=factoryMethod();
return w;
}
}
public class ConcreteCreator extends Creator{
@Override
public Water factoryMethod() {
// TODO Auto-generated method stub
Water w;
w=new LifeWater();
return w;
}
}
下面是如何调用上述代码,得到想要产品类的实现:
Water w;
Creator c=ConcreteCreator ();
w=c.getObject();
相关文章推荐
- 用h5的白鹭引擎做了个小游戏
- 第十节,While循环和for循环
- 设置placeholder的字体颜色
- html的meta总结,html标签中meta属性使用介绍
- 2016年5月27日下午(妙味课堂js基础-3笔记二(事件))
- VMware Tools的安装
- hdu 2438Turn the corner 三分
- StyleCop学习笔记——自定义规则
- 寻找数组中的最大值和最小值
- Apache服务器最新版下载、安装及配置(win版)
- Android自定义控件常用方法总结
- opencv的change log
- 读《茶树冷胁迫的全局基因表达谱》
- Mysql
- 普票系统报错 database disk image is malformed
- jsp两次迭代显示实体中的set集合
- 【iOS】网络操作与AFNetworking
- Android之权限检查(解决未获取用户权限允许)
- sparkStreaming必用的sparkStreamingContext,Dsteam和Receiver
- Foo, Bar是什么意思?