>>返回《C#常用设计模式》
- 1. 简介
- 2. 示例
- 2.1. 武器工厂例子
- 2.1.1. 简单工厂
- 2.1.2. 工厂方法
- 2.2. 数据库访问工厂示例代码
- 2.1. 武器工厂例子
1. 简介
- 动机
- 在软件系统中,经常面临"某个对象"的创建工作;由于需求的变化,这个对象经常面临着剧烈的变化,但是它却拥有比较稳定的接口。
- "封装机制"来隔离出"这个易变对象"的变化,从而保持系统中"其他依赖对象的对象"不随着需求变化而变化
- 意图
- 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。
2. 示例
2.1. 武器工厂例子
2.1.1. 简单工厂
一个需要通过工厂创建对象的需求,所以不需要抽象,那么武器工厂就是具体实现类通过传参不同,制造不同的武器,返回类型为基类武器,实际对象为继承该基类的对象。
2.1.2. 工厂方法
时间定位在冷兵器的年代,武器种类的需求开始出现,单个工厂的方式出现问题:
- 代码逻辑复杂: 一个工厂负责所有产品生产
- 难以维护: 每当新增一个产品都需要修改这个工厂,这时不能保证原有业务不受影响
这时引入了工厂方法模式,可以解决这些问题。
示例:
开始生产的是匕首、太刀,后来需求变化需要宝剑的生产,而且预计后面还会生产其他的武器。
- 工厂方法类有且只有一个生产的产品线(方法),比如定义为:武器工厂来生产武器;
- 具体的工厂类继承工厂接口,比如:匕首工厂继承武器工厂接口
- 实际产品为:匕首(继承自武器)
- 设计带来的适应性:
- 开始工厂生产的是匕首、太刀,后来因为要适配新武器方便添加的需求,简单工厂模式升级为工厂方法模式
- 当新种类的武器(宝剑)需要生产,只需要增加宝剑工厂来满足需求,这个工厂可以生产宝剑,宝剑继承基类武器。
2.2. 数据库访问工厂示例代码
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Demo{ class Program { static IFactory fac = new MySQLFactory(); static void Main(string[] args) { ISqlHelper sqlHelper = fac.CreateSqlHelper(); sqlHelper.Execute(); Console.ReadKey(); } } #region 定义接口 //约定工厂能创建那个类型产品 武器工厂 public interface IFactory { ISqlHelper CreateSqlHelper(); } //约定工厂产品的特点 武器 public interface ISqlHelper { int Execute(); object ExecuteScale(); }
没有评论:
发表评论