创建型---工厂方法模式

举报
斌哥来了 发表于 2021/07/28 19:22:25 2021/07/28
【摘要】 // 创建者类声明的工厂方法必须返回一个产品类的对象。创建者的子类通常会提供 // 该方法的实现。 class Dialog is // 创建者还可提供一些工厂方法的默认实现。 abstract method createButton():Button // 请注意,创建者的主要职责并非是创建产品。其中通常会包含一些核心业务 // 逻辑,这些逻辑依赖于由工厂方法返回的...


















// 创建者类声明的工厂方法必须返回一个产品类的对象。创建者的子类通常会提供

// 该方法的实现。

class Dialog is

// 创建者还可提供一些工厂方法的默认实现。

abstract method createButton():Button


// 请注意,创建者的主要职责并非是创建产品。其中通常会包含一些核心业务

// 逻辑,这些逻辑依赖于由工厂方法返回的产品对象。子类可通过重写工厂方

// 法并使其返回不同类型的产品来间接修改业务逻辑。

method render() is

// 调用工厂方法创建一个产品对象。

Button okButton = createButton()

// 现在使用产品。

okButton.onClick(closeDialog)

okButton.render()



// 具体创建者将重写工厂方法以改变其所返回的产品类型。

class WindowsDialog extends Dialog is

method createButton():Button is

return new WindowsButton()


class WebDialog extends Dialog is

method createButton():Button is

return new HTMLButton()



// 产品接口中将声明所有具体产品都必须实现的操作。

interface Button is

method render()

method onClick(f)


// 具体产品需提供产品接口的各种实现。

class WindowsButton implements Button is

method render(a, b) is

// 根据 Windows 样式渲染按钮。

method onClick(f) is

// 绑定本地操作系统点击事件。


class HTMLButton implements Button is

method render(a, b) is

// 返回一个按钮的 HTML 表述。

method onClick(f) is

// 绑定网络浏览器的点击事件。



class Application is

field dialog: Dialog


// 程序根据当前配置或环境设定选择创建者的类型。

method initialize() is

config = readApplicationConfigFile()


if (config.OS == "Windows") then

dialog = new WindowsDialog()

else if (config.OS == "Web") then

dialog = new WebDialog()

else

throw new Exception(" 错误!未知的操作系统。 ")


// 当前客户端代码会与具体创建者的实例进行交互,但是必须通过其基本接口

// 进行。只要客户端通过基本接口与创建者进行交互,你就可将任何创建者子

// 类传递给客户端。

method main() is

this.initialize()

dialog.render()












【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。