第 3 周 代码重构:代码重构能力是架构师最基本的能力

用户头像
陆不得
关注
发布于: 2020 年 06 月 24 日

1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。



2. 请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。





<?php
interface 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、学习总结

设计模式总结了一些常见问题的解决思路,基于面向对象基本原则的开发方式使用设计模式更容易落地实现。



用户头像

陆不得

关注

还未添加个人签名 2017.12.14 加入

还未添加个人简介

评论

发布
暂无评论
第3周 代码重构:代码重构能力是架构师最基本的能力