首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计方式-创建型-工厂-简单工厂模式

2012-09-06 
设计模式-创建型-工厂-简单工厂模式一、姑且用一个这样的图表示一下:?二、简单工厂的基本简介:百度释义:又叫

设计模式-创建型-工厂-简单工厂模式

一、姑且用一个这样的图表示一下:
设计方式-创建型-工厂-简单工厂模式
?二、简单工厂的基本简介:百度释义:又叫静态工厂方法,不属于那23种设计模式之一。

? 动态决定哪个类被实例化,不必事先知道哪个类要被实例化!

?

三、举例:QQ里面常用发表情的:

? ? ? ? ? ?1、?表情 b=new Smile();//这种应该是很熟悉的创建方式

? ? ? ? ? ? 2、表情 b=表情工厂.createBiaoQing(“表情内容”);

?

四、角色与结构:

设计方式-创建型-工厂-简单工厂模式
?工厂类角色(creator):BQFctory,在creat方法下创建产品对象(smile,cry);

抽象产品角色(product):BiaoQing;定义简单工厂创建的对象的父类或它们共同拥有的接口。可以是一个类、抽象 ? ? ? ? ? ? ? ? ? ? 类或接口。(我这里是一个接口);

具体产品角色concreateproduct:Smile,Cry;工厂具体产出的对象。

?

?

五、根据代码分析:

? ?BiaoQing接口,仅需定义所需要的方法?

?

package SimpleFctory;public interface BiaoQing {public void show();}

?

?

Smile类实现BiaoQing中的方法

??package SimpleFctory;

public class Smile implements BiaoQing{public void show() {System.out.println("smile的显示方法");}}

?

Cry类实现BiaoQing中的方法

package SimpleFctory;public class Cry implements BiaoQing{public void show() {System.out.println("cry的显示方法");}}

?

BQFctory的create方法的返回类型是BiaoQing,然后根据括号内的内容返回不同的类型

package SimpleFctory;public class BQFctory {public static BiaoQing create(String type){//为了方便调用,我们在这里将其方法设为公开静态的if(type.equals("smile")){//根据创建方法后的类型来判断需要返回什么类型return new Smile();}else if(type.equals("cry")){return new Cry();}elsereturn null;}}

?

测试:

package SimpleFctory;public class Test {public static void main(String[] args) {BiaoQing b1=BQFctory.create("smile");b1.show();BiaoQing b2=BQFctory.create("cry");b2.show();}}
?结果:smile的显示方法

? ? ? ? ? cry的显示方法


我们反过来,从主程序开始看就很好理解了,首先调用BQFctory里的静态方法create,根据方法提供的type返回所需要的类型,然后调用相应的方法!

?

六、优点:

1、不必事先知道哪个类要被实例化

2、只需在需要的地方调用即可,无需像 “ 表情 b=new Smile() "这样重新实例化一个对象,方便,同时也节省了内存!

?

七、缺点:

1、由于所需要的具体产品待定,如果很多的话就要重新添加新的类,并且要在工厂类(此例中的BQFctory类)中添加判断语句,扩展比较麻烦,好像违背了OOP的开闭原则吧!所以最好是用在所需创建的对象比较少的情形上!

?

?

就这么点理解了!

热点排行