设计模式题库以及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、选择题(20分,20个)
二、简答题(30分,6个)
1、框架的定义是框架就是一组相互协作的类,对于特定的一类软件,框架构成了一种可重用的设计。
2、架构是一个软件系统从整体到部分的最高层次的划分。
架构包括架构元件(Architecture Component)、联结器(Connector)、任
务流(Task-flow)
3、架构的目标:可靠性、安全性、可拓展性、可定制化、可维护性、客户体验、市场时机
4、架构分成三种:逻辑架构、物理架构、系统架构
5、架构的两要素:元件划分、设计决定
6、设计模式是一系列在实践中总结出来的可复用的面向对象的软件设计方法
7、划分三种不同层次的模式:架构模式(Architectural Pattern)、设计模式(Design Pattern)、成例(Idiom)。
成例有时称为代码模式(Coding Pattern)。
8、创建型设计模式,如工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式、原型(Prototype)模式、单例(Singleton)模式,建造(Builder)模式
9、结构型设计模式,如合成(Composite)模式、装饰(Decorator)模式、代理(Proxy)模式、享元(Flyweight)模式、门面(Facade)模式、桥梁(Bridge)模式
10、架构模式描述软件系统里的基本的结构组织或纲要
11、常见的架构模式:分层模式、黑板模式、中介模式、分散过程模式、微核
模式
12、框架与架构之间的关系:架构确定了系统整体结构、层次划分,不同部分之间的协作等设计考虑。
框架比架构更具体。
更偏重于技术涉嫌。
确定框架后,软件体系结构也随之确定,而对于同一软件体系结构(比如Web开发中的MVC),可以通过多种框架来实现
13、框架与设计模式之间的关系:设计模式研究的是一个设计问题的解决方法,一个模式可应用于不同的框架和被不同的语言所实现;而框架则是一个应用的
体系结构,是一种或多种设计模式和代码的混合体虽然它们有所不同,但却共
同致力于使人们的设计可以被重用,在思想上存在着统一性的特点,因而设计
模式的思想可以在框架设计中进行应用
14、框架和设计模式存在着显著的区别:应用领域(前者单一解决方案可在不
同框架上用)、内容(模式单纯设计、框架式设计与代码的混合体)
15、设计模式比框架更容易移植
16、类之间的关系:关联(自身关联、单向、双向实线箭头)、聚合(空心箭头)
/组合<包容>(实心箭头)、依赖(虚线箭头)、泛华(继承,实线三角形)、实现(虚线三角形)
17、基本元素符:类、包、接口
18、开闭(OCP)原则:一个软件实体应当对扩展开放,对修改关闭。
19、OCP原则优点:a、通过扩展已有软件系统,可以提供新的行为,以满足对
软件的新的需求,使变化中的软件有一定的适应性和灵活性。
b、已有软件模块,特别是最重要的抽象层模块不能再修改,这使变化中的软件系统有一定的稳定
性和延续性。
20、里氏代换原则(LSP):子类型必须能够替换它们的基类型
21、依赖倒置(DIP)原则是:要依赖于抽象,不要依赖于具体。
22、工厂类优点:缺点:含有必要的判断逻辑,实现了对责任的分割;一旦不
能正常工作,整个系统都要受到影响
23、工厂方法模式是类的创建模式
24、抽象工厂(具体工厂)角色:是工厂方法模式的核心
25、工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具
体类上。
26、代码表示聚合关系:public class Employee{
Private EmpType et;
Public EmpType getEmpType(){}}
Employee到Emptype。
三、综合体(50分,5个编程题)
1、公共数据库:sql语句、参数、存储过程
public static string connectionString= System.Configuration.ConfigurationSettings.AppSettings
["conStr"].ToString();
sql语句:public static int ExecuteSql(string SQLString)
{
using(OracleConnection connection=new OracleConnection(connectionString))
{
using(OracleCommand cmd=new OracleCommand(SQLString,connection))
{
try
{
connection.Open();
int rows=cmd.ExecuteNonQuery();
return rows;
}
catch(System.Data.SqlClient.SqlException E)
{
connection.Close();
throw new Exception(E.Message);
}
}
}
}
参数:public static int ExecuteSql(string SQLString,params OracleParameter[]cmdParms)
{
using(OracleConnection connection=new OracleConnection(connectionString))
{
using(OracleCommand cmd=new OracleCommand())
{
try
{
PrepareCommand(cmd,connection,null, SQLString,cmdParms);
int rows=cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return rows;
}
catch(System.Data.SqlClient.SqlException E)
{
throw new Exception(E.Message);
}
}
}
}
存储过程:public static int ExecuteSql(string SQLString,string content)
{
using(OracleConnection connection=new OracleConnection(connectionString))
{
OracleCommand cmd=new OracleCommand(SQLString, connection);
System.Data.SqlClient.SqlParameter myParameter=new
System.Data.SqlClient.SqlParameter("@content",SqlDbType.NText);
myParameter.Value=content;
cmd.Parameters.Add(myParameter);
try
{
connection.Open();
int rows=cmd.ExecuteNonQuery();
return rows;
}
catch(System.Data.SqlClient.SqlException E)
{
throw new Exception(E.Message);
}
finally
{
cmd.Dispose();
connection.Close();
}
}
}
2、实体层
public class部门Model
{
string depart_id;
public部门Model(){;}
public部门Model(string id,string name,string leader, string disc)
{
this.depart_id=id;
}
public string部门编号
{
get{return depart_id;}
set{depart_id=value;}
}
3、数据访问层:接口、实现类
接口:public interface ICommon
{
bool Insert(object Model);
object Select(string id);
List<object>SelectList();
bool Update(object Model);
bool Delete(object Model);
}
public interface I部门:ICommon
{
string get部门ID();
List<员工Model>GetLeader(部门Model m1);
}
实现类:public class部门:I部门
{
public bool Insert(object m)
{
部门Model m1=m as部门Model;
OracleParameter[]paras={
new OracleParameter("p_Id",OracleType.Char,13),
new OracleParameter("P_name",OracleType.NVarChar),
new OracleParameter("P_leader",OracleType.Char,13),
new
OracleParameter("p_disc",OracleType.NVarChar)
};
paras[0].Value=m1.部门编号;
paras[1].Value=m1.部门名称;
paras[2].Value=m1.部门领导;
paras[3].Value=m1.部门描述;
if(OracleHelper.RunProcedureTotal("TB_DEPARTMENT_INSERT", paras)==1)
{
return true;
}
else
{
return false;
}
}
}
4、工厂模式
工厂:public class ClassCreate
{
public static T Create<T>(string classname)
{
string path= System.Configuration.ConfigurationManager.AppSettings["DAL"].ToString ();
string className=path+"."+classname;
return(T)Assembly.Load(path).CreateInstance(className);
}
}
配置文件(app.config):<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="conStr"value="Data Source=ksxt;User ID=rjsj;Unicode=True;password=123"/>
<add key="DAL"value="SQLDAL"/>
</appSettings>
</configuration>
5、业务逻辑层
public class B部门
{
private static IDAL.I部门department= Factory.ClassCreate.Create<IDAL.I部门>("部门");
public static bool Insert(部门Model m)
{
bool t=true;
if(m==null||m.部门编号==null||m.部门编号=="")
{
t=false;
}
else
{
t=department.Insert((object)m);
}
return t;
}
}。