TypeScript与设计模式(二)- 抽象工厂

抽象工厂

维基百科定义

统一塑模语言中的类别图来表示抽象工厂

抽象工厂模式(英语:Abstract factory pattern)是一种软件开发设计模式。抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来。

其中的java例子

  • 使用上面的例子
public interface Button {}
public interface Border {}
  • 实现抽象类
public class MacButton implements Button {}
public class MacBorder implements Border {}

public class WinButton implements Button {}
public class WinBorder implements Border {}
  • 接着实现工厂
public class MacFactory {
	public static Button createButton() {
	    return new MacButton();
	}
	public static Border createBorder() {
	    return new MacBorder();
	}
}
public class WinFactory {
	public static Button createButton() {
	    return new WinButton();
	}
	public static Border createBorder() {
	    return new WinBorder();
	}
}

参照如上例子,我基于react native做了一个抽象工厂的typescript例子,代码参照github地址:

https://github.com/aloveb/ts_research/tree/master/src/screen/mode/factory 

github这个抽象工厂的例子是基于维基百科的例子做的一个react native 联合typescript的改编,如果你仔细观察就会发现,里面的改变并不是很大。

TypesScript这个带有静态类型检查的js超集,在约束代码上起到一个非常好的作用,代码可读性高,结构清晰,对大型项目来说,后期维护成本也相对较低。

在这份代码中有两个工厂,这两个工厂跟java代码一样,是基于平台是window还是mac来做的工厂,在做Example的时候,我们调用就区别平台来调用,这里用按钮来区分平台调用返回结果, 效果如下:

这个例子的两个工厂,分管自己不同的代码实现,尤其是在react native APP开发过程中,ios 和 android, 在具体页面的实现上可能有很大的不同,这样具体实现我们可以交给工厂来控制。

这里MacFactory 主要负责mac系统下的功能实现,WinFactory主要负责Window的功能实现。同时每一工厂中的定制方法根据用户需要的类型调用的类又不一样,实现会分管到具体的类中。

对于用户来说,只要关心需求,剩下的交给工厂去完成,减少段和段之间耦合联系性。

当前这个例子代码是针对Windows和mac来做的工厂模式例子。在我们react native实际开发中,经常会遇到ios和android下面实现不一样的地方,我们可以参照工厂模式,设计一些公用的组件生成方法。

猜你喜欢

转载自blog.csdn.net/a_love_b/article/details/81171904