写点什么

03 周作业——设计模式

用户头像
dao
关注
发布于: 2020 年 06 月 23 日
  1. 请在草稿纸上手写一个单例模式的实现代码。

保证系统中只产生 Singleton 的单一实例。实现方式分为懒汉式饿汉式,需要考虑线程安全,可以使用语言的特性来实现。

以下以swift来完成,实在是非常简单,构造函数私有化,类的属性自动实现初始化(swift 语言特性)。



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

C#版的设计和实现如下:


  • Component 抽象类

namespace arch.Composite{    using System;
public abstract class Component { protected string name;
public Component(string name) { this.name = name; }
public abstract void Add(Component c);
public abstract void Remove(Component c);
public virtual void Print() { Console.WriteLine("print {0}", this.name); } }}
复制代码
  • Container 类: 可以拆分成较多的容器类组建,比如 Window, Frame, Panel 等,不一一写,统称 Container

namespace arch.Composite{    using System;    using System.Collections.Generic;
/// <summary> /// Container Component: it can be Window, Frame, Panel ... /// </summary> public class Container : Component { private IList<Component> children = new List<Component>();
public Container(string name) : base(name) { }
public override void Add(Component c) { this.children.Add(c); }
public override void Print() { Console.WriteLine("print {0}", this.name); foreach (var item in this.children) { item.Print(); } }
public override void Remove(Component c) { this.children.Remove(c); } }}
复制代码
  • FormComponent 类:可以拆分成很多的单一组件,比如 Button, Label, TextBox, CheckBox 等,不一一写,统称 FormComponent

namespace arch.Composite{    /// <summary>    /// Form Component: it can be Button, Label, TextBox, CheckBox ...    /// </summary>    public class FormComponent : Component    {        public FormComponent(string name) : base(name)        { }
public override void Add(Component c) { throw new System.NotImplementedException(); }
public override void Remove(Component c) { throw new System.NotImplementedException(); } }}
复制代码
  • 输出结果

源代码

发布于: 2020 年 06 月 23 日阅读数: 57
用户头像

dao

关注

还未添加个人签名 2018.04.14 加入

还未添加个人简介

评论

发布
暂无评论
03周作业——设计模式