工厂方法模式如何扩展为更灵活的简单工厂模式?

2026-04-10 14:201阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计410个文字,预计阅读时间需要2分钟。

工厂方法模式如何扩展为更灵活的简单工厂模式?

场景描述:假设现有User类(如下),原本设计程序使用SqlServer进行访问。由于客户需求变化,需要使用Access来访问数据库。

工厂方法模式如何扩展为更灵活的简单工厂模式?

javapublic class User { private int id; private String name; public int ID { get { return id; } }}

场景描述: 假设现在有一个User类(如下),原本设计程序使用SqlServer访问,现在因为客户需求的变化,需要使用Access来访问

public class User { private int id; private string name; public int ID { get { return id; } set { id = value; } } public string Name { get { return name; } set { name = value; } } } 对于这种场景,单纯的去修改访问数据库代码,把SqlServer的访问类,修改成Access的访问类,不仅会出现很多问题,因为两种数据库查询语句本身就有区别,最重要的是扩展性非常差,万一以后需要改成用MySql来访问,又是一通改。所以这里用到了工厂方法模式。 首先定义一个User对象接口

//User对象接口类 public interface IUser { //业务逻辑 void Insert(User user); User GetUser(int i); } 然后是两种数据库实现的User对象,都继承于IUser接口

//Sql数据库User对象 public class SqlUser : IUser { public void Insert(User user) { Console.WriteLine("InsertSqlUser"); } public User GetUser(int i) { Console.WriteLine("SqlUserList"); return null; } } //Access数据库User对象 public class AccessUser : IUser { public void Insert(User user) { Console.WriteLine("InsertAccessUser"); } public User GetUser(int i) { Console.WriteLine("AccessUserList"); return null; } } 定义一个工厂接口

//工厂接口 interface IFactory { //继承类可以根据不同的需求产生不同的User对象 IUser CreateUser(); } 具体的工厂,根据不同的需求,产生不同的User对象

//Sql数据库工厂 public class SqlFactory : IFactory { //访问Sql数据库的User对象 public IUser CreateUser() { return new SqlUser(); } } //Access数据库工厂 public class AccessFactory : IFactory { //访问Access数据库的User对象 public IUser CreateUser() { return new AccessUser(); } }

标签:延伸

本文共计410个文字,预计阅读时间需要2分钟。

工厂方法模式如何扩展为更灵活的简单工厂模式?

场景描述:假设现有User类(如下),原本设计程序使用SqlServer进行访问。由于客户需求变化,需要使用Access来访问数据库。

工厂方法模式如何扩展为更灵活的简单工厂模式?

javapublic class User { private int id; private String name; public int ID { get { return id; } }}

场景描述: 假设现在有一个User类(如下),原本设计程序使用SqlServer访问,现在因为客户需求的变化,需要使用Access来访问

public class User { private int id; private string name; public int ID { get { return id; } set { id = value; } } public string Name { get { return name; } set { name = value; } } } 对于这种场景,单纯的去修改访问数据库代码,把SqlServer的访问类,修改成Access的访问类,不仅会出现很多问题,因为两种数据库查询语句本身就有区别,最重要的是扩展性非常差,万一以后需要改成用MySql来访问,又是一通改。所以这里用到了工厂方法模式。 首先定义一个User对象接口

//User对象接口类 public interface IUser { //业务逻辑 void Insert(User user); User GetUser(int i); } 然后是两种数据库实现的User对象,都继承于IUser接口

//Sql数据库User对象 public class SqlUser : IUser { public void Insert(User user) { Console.WriteLine("InsertSqlUser"); } public User GetUser(int i) { Console.WriteLine("SqlUserList"); return null; } } //Access数据库User对象 public class AccessUser : IUser { public void Insert(User user) { Console.WriteLine("InsertAccessUser"); } public User GetUser(int i) { Console.WriteLine("AccessUserList"); return null; } } 定义一个工厂接口

//工厂接口 interface IFactory { //继承类可以根据不同的需求产生不同的User对象 IUser CreateUser(); } 具体的工厂,根据不同的需求,产生不同的User对象

//Sql数据库工厂 public class SqlFactory : IFactory { //访问Sql数据库的User对象 public IUser CreateUser() { return new SqlUser(); } } //Access数据库工厂 public class AccessFactory : IFactory { //访问Access数据库的User对象 public IUser CreateUser() { return new AccessUser(); } }

标签:延伸