AS3设计模式之工厂模式

来源:互联网 发布:linux修改cpu核心数 编辑:程序博客网 时间:2024/05/18 04:52

来由:

as3中许多类采用类似这样的代码:

 

Client 类创建了Product类的一个实例,并将它赋给变量object.代码的主要特征就是Client类和product类联系十分紧密.但问题是如果现在要更改Product的内容比如接受参数等,那么Client也要跟着改变,如果这种类很多,那么劳动量将比较大.

工厂模式的提出就是降低这两个类之间的耦合度,通过设置一个中间过渡类(接口或者抽象类)来实现,中间过渡类的作用就是在客户端(这里指Client)不指定具体产生哪个对象类的情况下访问对象.

 

简单工厂:

 

简单工厂可以通过判断传进来的产品类型来返回特定的产品,但是这段代码可重用性和灵活性太低,主要表现在如果客户添加一种新的产品类型的话,我们就需要修改原有的代码来扩增if else 判断,但这违反了OOP中的open-closed原则:类和方法的代码应该易于扩展,但不允许修改.

 

工厂方法模式的主要优点就是很好的扩展性

 

类图(这应该是uml吧,第一次接触,乱画的)

工厂模式类图

图中Creator和Product类不是具体的类,而是定义为了接口.一个单纯的接口不会实现任何一个接口中声明的方法,但是还有一种特殊的接口叫抽象接口,抽象接口能够实现提供方法的默认的实现方式,也可以讲抽象接口叫做抽象类,但不能将抽象接口实例化,也不能被其他类继承.

Creator类是一个抽象类,里面定义了一个工厂方法(factoryMethod),factoryMethod是一个没有实现的抽象方法,由Crerator的子类提供(ConcreteCreator)工厂方法的具体实现,在Creator类里还定义并实现了一个public的方法(operation)用这个方法来调用工厂方法.

 

 

一个例子

之前的准备,新建一个example包,包外一个Main类

产品类

产品类由一个产品接口以及具体实现接口的产品组成

不多说,贴代码

 

 

 

创建类,用于创建各中产品

 

 

客户类,发送生产命令

 

 

一个小例子完了,总结下主要用到的技巧

1:使用一个公共接口来定义一个抽象方法,然后在子类中重写;

2:通过基类来创建子类并调用基类的方法;

 

写一个要学的是单例模式,听说很重要的一个设计模式 ^_^