第 3 周 代码重构:代码重构能力是架构师最基本的能力
发布于: 2020 年 06 月 24 日
1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
2. 请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。
<?phpinterface DomInterface{ public function draw();}abstract class Dom implements DomInterface{ protected $name; public function __construct($name) { $this->name = $name; }}class ContainerDom extends Dom{ /** @var DomInterface[] doms */ private $doms = []; public function draw() { foreach ($this->doms as $dom) { $dom->draw(); } } public function addDom($dom) { $this->doms[] = $dom; }}class WinFormDom extends ContainerDom{ public function draw() { echo sprintf("print WinForm(%s)\n", $this->name); parent::draw(); }}class FrameDom extends ContainerDom{ public function draw() { echo sprintf("print Frame(%s)\n", $this->name); parent::draw(); }}class PictureDom extends Dom{ public function draw() { echo sprintf("print Picture(%s)\n", $this->name); }}class ButtonDom extends Dom{ public function draw() { echo sprintf("print Button(%s)\n", $this->name); }}class LabelDom extends Dom{ public function draw() { echo sprintf("print Label(%s)\n", $this->name); }}class TextBoxDom extends Dom{ public function draw() { echo sprintf("print TextBox(%s)\n", $this->name); }}class PasswordDom extends Dom{ public function draw() { echo sprintf("print Password(%s)\n", $this->name); }}class CheckBoxDom extends Dom{ public function draw() { echo sprintf("print CheckBox(%s)\n", $this->name); }}class LinkLabelDom extends Dom{ public function draw() { echo sprintf("print LinkLabel(%s)\n", $this->name); }}$winForm = new WinFormDom('WINDOW窗口');$winForm->addDom(new PictureDom('LOGO图片'));$winForm->addDom(new ButtonDom('登录'));$winForm->addDom(new ButtonDom('注册'));$frame = new FrameDom('FRAME1');$frame->addDom(new LabelDom('用户名'));$frame->addDom(new TextBoxDom('文本框'));$frame->addDom(new LabelDom('密码'));$frame->addDom(new PasswordDom('密码框'));$frame->addDom(new CheckBoxDom('复选框'));$frame->addDom(new TextBoxDom('记住用户名'));$frame->addDom(new LinkLabelDom('忘记密码'));$winForm->addDom($frame);$winForm->draw();
3、学习总结
设计模式总结了一些常见问题的解决思路,基于面向对象基本原则的开发方式使用设计模式更容易落地实现。
划线
评论
复制
发布于: 2020 年 06 月 24 日 阅读数: 30
陆不得
关注
还未添加个人签名 2017.12.14 加入
还未添加个人简介
评论