b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

工厂方法模式_工厂方法模式 java_工厂方法模式的好处(5)

电脑杂谈  发布时间:2017-01-18 23:59:51  来源:网络整理

不同套餐具有不同收费标准。 示例3 优点: 工厂可以自主决定创建何种产品对象,创建细节被隐藏到具体工厂内部 添加产品时,只需增加新的产品类和相应的生产工厂,无需修改原有的产品和生产工厂 缺点: 添加产品时,给系统会带来额外开销 工厂方法模式优缺点 工厂方法模式使用环境 如果只用一个产品类等级就可以描述所有已有的产品类, 简单工厂模式是很好的解决方案 当只用一个产品类等级不足以描述所有的产品类,包括以后可能要添加的新的产品类时,就应当考虑采用工厂方法模式。 由于工厂方法模式可以容许多个实的工厂类,以每一个工厂类负责每一个产品类等级,因此这种模式可以容纳所有的产品等级。 练习题 利用工厂方法模式实现切换功能 第3次作业 练习题 通过工厂方法模式实现单例模式的功能效果 (单例模式的核心要求在内存中只有一个对象) 如同一个交通警察站在来往的车辆流中,决定放行哪一个方向的车辆向那一个方向流动一样 * Factory Method模式演化 、使用接口或抽象类 2、使用多个工厂方法 抽象工厂角色可以规定出多于一个的工厂方法,从而使具体工厂角色实现这些不同的工厂方法,这些方法可以提供不同的商业逻辑,以满足提供不同的产品对象的任务。

* 如同一个交通警察站在来往的车辆流中,决定放行哪一个方向的车辆向那一个方向流动一样 * Factory Method模式演化 、使用接口或抽象类 2、使用多个工厂方法 抽象工厂角色可以规定出多于一个的工厂方法,从而使具体工厂角色实现这些不同的工厂方法,这些方法可以提供不同的商业逻辑,以满足提供不同的产品对象的任务。 * 可以把抽象工厂(套餐工厂)做成一个接口,这个接口只有一个方法,就是创建抽象 产品(计费类)的工厂方法。然后所有的要生产具体类(动感地带,神州行等)的工厂去实现这个接口,由具体的套餐工厂去创建具体的套餐类。于是我们再增加新 的套餐的时候,就不需要更改原有的工厂类,只需要增加此功能的计费类和相应的工厂类就可以了。 * 优点 封装了创建具体对象的工作 使得客户代码“针对接口编程”,保持对变化的“关闭” * 具体实现代码: 1、产品类 sing System.Configuration; using System.Data; using System.Data.SqlClient; using System.Data.OleDb; namespace FactoryLibrary /// /// 抽象产品基类 /// public abstract class Product abstract public DataTable GetData ; /// /// 具体产品SQL Server2005,继承自Product类 /// public class SqlServer2005 : Product string connectionString string.Empty; SqlConnection connection null; SqlCommand cmd null; SqlDataAdapter dap null; DataTable table null; /// /// 读取SQL Server /// /// public override DataTable GetData try connectionString ConfigurationManager.ConnectionStrings["sqlConn"].ConnectionString.ToString ; connection new SqlConnection connectionString ; cmd new SqlCommand "SELECT EmployeeID,LastName,FirstName,Title FROM Employees", connection ; dap new SqlDataAdapter cmd ; table new DataTable ; dap.Fill table ; return table; catch return null; finally table.Dispose ; /// /// 具体产品Access,继承自Product类 /// public class Access : Product string connectionString string.Empty; OleDbConnection connection null; OleDbCommand cmd null; OleDbDataAdapter dap null; DataTable table null; /// /// 读取Access /// /// public override DataTable GetData try connectionString ConfigurationManager.ConnectionStrings["accessConn"].ConnectionString.ToString ; connection new OleDbConnection connectionString ; cmd new OleDbCommand "SELECT ID,姓氏,名字,电子邮件地址 FROM 员工", connection ; dap new OleDbDataAdapter cmd ; table new DataTable ; dap.Fill table ; return table; catch return null; finally table.Dispose ; /// /// 具体产品Oracle,继承自Product类 /// public class Oracle : Product /// /// 读取Oracle /// /// public override DataTable GetData return null; 2、工厂类 namespace FactoryLibrary /// /// 抽象工厂类 /// public abstract class Factory /// /// 工厂方法 /// abstract public Product createDataBase ; /// /// SQL Server工厂,继承自Factory类 /// public class SqlServerFactory : Factory /// /// 返回SQL Server产品 /// /// public override Product createDataBase return new SqlServer2005 ; /// /// Access工厂,继承自Factory类 /// public class AccessFactory : Factory /// /// 返回Access产品 /// /// public override Product createDataBase return new Access ; /// /// Oracle工厂,继承自Factory类 /// public class OracleFactory : Factory /// /// 返回Oracle产品 /// /// public override Product createDataBase return new Oracle ; 3、客户端 using System; using System.Windows.Forms; using FactoryLibrary; namespace FactoryMethod public partial class mainForm : Form public mainForm InitializeComponent ; this.rbtnSQLServer.CheckedChanged + new EventHandler rbtn_CheckedChanged ; this.rbtnOracle.CheckedChanged + new EventHandler rbtn_CheckedChanged ; this.rbtnAccess.CheckedChanged + new EventHandler rbtn_CheckedChanged ; /// /// 事件调用 /// /// param name "sender" /// param name "e" void rbtn_CheckedChanged object sender, EventArgs e selectedDB RadioButton sender .Text; this.lblSelectedInfo.Text "您选择了" + selectedDB + "!"; this.gboxSelect.Enabled false; this.btnShowData.Enabled true; /// /// 切换 /// /// param name "sender" /// param name "e" private void btnSelectNewDB_Click object sender, EventArgs e if this.gboxSelect.Enabled true MessageBox.Show "您还没有选择,请选择!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk ; this.rbtnSQLServer.Checked false; this.rbtnOracle.Checked false; this.rbtnAccess.Checked false; this.gboxSelect.Enabled true; this.lblSelectedInfo.Text null; this.btnShowData.Enabled false; this.dgvShowData.DataSource null; /// /// 存放客户端所选择的 /// private string selectedDB null; /// /// 访问显示数据 /// /// param name "sender" /// param name "e" private void btnShowData_Click object sender, EventArgs e switch selectedDB case "SQL Server2005": this.dgvShowData.DataSource new SqlServerFactory .createDataBase .GetData ; break; case "Oracle": break; case "Access": this.dgvShowData.DataSource new AccessFactory .createDataBase .GetData ; break; default: break; * 有一系列的自动车产品Bus(公交车),Truck(卡车);它们需要由不同的工厂生产,但具有相同的生产流程。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27237-5.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 宋俊作
      宋俊作

      理财方式这么多

    • 贾盼盼
      贾盼盼

      我需要输入登录名个密码的wifi

    热点图片
    拼命载入中...