软件设计模式复习题(3)
答:public class Form1 : System.Windows.Forms.Form { private bel lbSalary; private ponentModel.Container components = null; AbstractEmployee prez, marketVP, salesMgr; TreeNode rootNode; AbstractEmployee advMgr, emp, prodVP, prodMgr, shipMgr; private System.Windows.Forms.TreeView EmpTree; private Random rand; private void init() { rand = new Random (); buildEmployeeList(); buildTree();} private void buildEmployeeList() { prez = new Boss("CEO", 200000); marketVP = new Boss("Marketing VP", 100000); prez.add(marketVP); salesMgr = new Boss("Sales Mgr", 50000); advMgr = new Boss("Advt Mgr", 50000); marketVP.add(salesMgr); marketVP.add(advMgr); prodVP = new Boss("Production VP", 100000); prez.add(prodVP); advMgr.add("Secy", 20000); for (int i = 1; i<=5; i++){ salesMgr.add("Sales" + i.ToString(), rand_sal(30000));} prodMgr = new Boss("Prod Mgr", 40000); shipMgr = new Boss("Ship Mgr", 35000); prodVP.add(prodMgr); prodVP.add(shipMgr);
for (int i = 1; i<=3; i++){ shipMgr.add("Ship" + i.ToString(), rand_sal(25000));} for (int i = 1; i<=4; i++){ prodMgr.add("Manuf" + i.ToString(), rand_sal(20000));}} private void buildTree() { EmpNode nod; nod = new EmpNode(prez); rootNode = nod; EmpTree.Nodes.Add(nod); addNodes(nod, prez);} private void getNodeSum(EmpNode node) { AbstractEmployee emp; float sum;
emp = node.getEmployee(); sum = emp.getSalaries();
lbSalary.Text = sum.ToString ();} private void addNodes(EmpNode nod, AbstractEmployee emp) { AbstractEmployee newEmp; EmpNode newNode; IEnumerator empEnum;
empEnum = emp.getSubordinates(); while (empEnum.MoveNext()) {
newEmp = (AbstractEmployee)empEnum.Current; newNode = new EmpNode(newEmp); nod.Nodes.Add(newNode); addNodes(newNode, newEmp);}} private float rand_sal(float sal) { float rnum = rand.Next (); rnum = rnum / Int32.MaxValue; return rnum * sal / 5 + sal;} public Form1() { InitializeComponent(); init();} protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose();}} base.Dispose( disposing );} private void InitializeComponent() { } [STAThread] static void Main() { Application.Run(new Form1());} private void EmpTree_AfterSelect(object sender, TreeViewEventArgs e) { EmpNode node;
node = (EmpNode)EmpTree.SelectedNode; getNodeSum(node);}} public class Boss:Employee{ public Boss(string name, float salary):base(name,salary) {} public Boss(AbstractEmployee emp):base(emp.getName() , emp.getSalary()) {} public override void add(string nm, float salary) { AbstractEmployee emp = new Employee(nm,salary); subordinates.Add (emp);} public override void add(AbstractEmployee emp){ subordinates.Add(emp)} public override AbstractEmployee getChild() { bool found; AbstractEmployee tEmp = null; IEnumerator esub ;
if (getName().Equals (getName())) return this; else {
found = false;
esub = subordinates.GetEnumerator (); while (! found && esub.MoveNext()) { tEmp = (AbstractEmployee)esub.Current; found = (tEmp.getName().Equals(name)); if (! found) {
if (! tEmp.isLeaf()) {
tEmp = tEmp.getChild(); found = (tEmp.getName().Equals(name));} if (found) return tEmp; else return new Employee("New person", 0);}}} public class Employee :AbstractEmployee { protected float salary; protected string name; protected ArrayList subordinates; public Employee(string nm, float salry) { subordinates = new ArrayList(); name = nm; salary = salry;} public float getSalary() { return salary;} public string getName() { return name;} public bool isLeaf() { return subordinates.Count == 0;}
} }
public virtual void add(string nm, float salary) { throw new Exception("No subordinates in base employee class");} public virtual void add(AbstractEmployee emp) { throw new Exception("No subordinates in base employee class");} public IEnumerator getSubordinates() { return subordinates.GetEnumerator ();} public virtual AbstractEmployee getChild() { return null;} public float getSalaries() { float sum; AbstractEmployee esub; sum = getSalary(); IEnumerator enumSub = subordinates.GetEnumerator() ; while (enumSub.MoveNext()) { esub = (AbstractEmployee)enumSub.Current; sum += esub.getSalaries();} return sum;}}
public interface AbstractEmployee { float getSalary(); string getName(); bool isLeaf(); void add(string nm, float salary); void add(AbstractEmployee emp); IEnumerator getSubordinates(); AbstractEmployee getChild(); float getSalaries(); }
public class EmpNode:TreeNode { private AbstractEmployee emp; public EmpNode(AbstractEmployee aemp ):base(aemp.getName ()) { emp = aemp; } public AbstractEmployee getEmployee() { return emp;}} 10、 综合应用装饰模式、命令模式和状态模式实现工具条命令按钮鼠标进入时高亮显
示状态以及鼠标单击按钮后呈现凹陷状态,表明当前按钮为选中状态。 答:Decorator类 namespace CoolDec{
public interface Decorator {
void mouseDown(object sender, EventArgs e); void paint(object sender, PaintEventArgs e); }} Form1窗口
namespace CoolDec{
public class Form1 : System.Windows.Forms.Form{
private System.Windows.Forms.Button btButtonA; private CoolDecorator cdec, cqdec;
public Form1(){
InitializeComponent(); init();}
private void init() {
cdec = new CoolDecorator (btButtonA);
this.Controls.AddRange(new System.Windows.Forms.Control[] {c …… 此处隐藏:4718字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [小学教育]四年级综合实践活动课《衣物的洗涤》教
- [小学教育]2014半年工作总结怎么写
- [小学教育]20世纪外国文学专题综合试题及答案
- [小学教育]TS_1循环使用催化丙烯环氧化反应研究
- [小学教育]最实用的考勤签到表(上下班签到表)
- [小学教育]气候与生态建筑——以新疆民居为例
- [小学教育]二人以上股东有限责任公司章程参考样本
- [小学教育]2014届第一轮复习资料4.1,3美好生活的
- [小学教育]土方开挖、降水方案
- [小学教育]手绘儿童绘本《秋天的图画》(蜡笔)
- [小学教育]2002级硕士研究生卫生统计学考试试题
- [小学教育]环保装备重点发展目录
- [小学教育]金蝶K3合并报表培训教材
- [小学教育]岩浆岩试题及参考答案
- [小学教育]知之深爱之切学习心得
- [小学教育]第十二章 蛋白质的生物合成
- [小学教育]Chapter 2-3 Solid structure and basi
- [小学教育]市政道路雨季专项施工方案
- [小学教育]中国海洋大学2012-2013学年第二学期天
- [小学教育]教育心理学第3章-学习迁移
- 浅谈深化国企改革中加强党管企业
- 2006年中国病理生理学会学术活动安排
- 设计投标工作大纲
- 基于ARP的网络攻击与防御
- 2016届湖北省七市(州)教科研协作体高三
- Google_学术搜索及其检索技巧
- 2019-2020学年七年级地理下册6.3美洲教
- 城市道路可研报告
- 【名师指津】2012高考英语 写作基础技
- 6级知识点培训北京师范大学《幼儿智趣
- 注册会计师会计知识点:金融资产
- 新安装 500 kV 变压器介损分析与判断
- PS2模拟器PCSX2设置及使用教程.
- 医院药事管理与药剂科管理组织机构
- {PPT背景素材}丹巴的醉人美景,免费,一
- NAS网络存储应用解决方案
- 青海省西宁市六年级上学期数学期末考试
- 测量管理体系手册依据ISO10012:2003
- 洞子小学培养骨干教师工作计划
- 浅谈《牛津初中英语》的教材特点及教学




