Factory Method 工厂方法
从耦合关系谈起
耦合关系直接决定着软件面对变化时的行为
– 模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之更改
– 模块与模块之间的松耦合使得软件面对变化时,一些模块更容易被替换或者更改,但其他模块保持不变
动机(Motivation)
在软件系统中,经常面临着“某个对象”的创建工作;由于需求的变化,这个对象经常面临着剧烈的变化,但是它却拥有比较稳定的接口。
如何应对这种变化?如何提供一种“封装机制”来隔离出“这个易变对象”的变化,从而保持系统中
意图(Intent)
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。——《设计模式》GoF
结构(Structure)
Factory Method模式的几个要点
- Factory Method模式主要用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合关系会导致软件的脆弱。
- Factory Method模式通过面向对象的手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展(而非更改)的策略,较好地解决了这种紧耦合关系。
- Factory Method模式解决“单个对象”的需求变化,Abstract Factory 模式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。
代码:
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace testWpf
{
public abstract class AbtractCar
{
public abstract void Startup();
public abstract void Run();
public abstract void Turn(Direction dretion);
public abstract void Stop();
}
public abstract class CarFactory
{
public AbtractCar CreateCar()
{
return new HongQiCar();
}
}
public class HongQiCar : AbtractCar
{
public override void Startup() { }
public override void Run() { }
public override void Turn(Direction dretion) { }
public override void Stop() { }
}
public class HongqiCarFactory : CarFactory
{
public override AbtractCar CreateCar()
{
return new HongQiCar();
}
}
public class CarTestFramework
{
public void BuidTestContext(CarFactory carFactory)
{
AbtractCar c1 = carFactory.CreateCar();
}
public void DoTest(AbtractCar car)
{
car.Run();
}
public Car GetTestData(AbtractCar car)
{
return car;
}
}
public class App
{
public static void Main()
{
CarTestFramework carTestFramework = new CarTestFramework();
//carTestFramework.BuidTestContext(new DongFengCarFactory());
//让子类决定实例化哪一个类
carTestFramework.BuidTestContext(new HongqiCarFactory());
}
}
}
转载于:https://www.cnblogs.com/timy/archive/2009/12/13/1623312.html
Factory Method 工厂方法相关推荐
- Factory Method工厂方法模式
定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类,属于创建型模式 在此模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类负责生产 ...
- 3.Factory Method 工厂方法模式(创建型模式)
1.定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使得一个类的实例化延迟到子类. 2.实现代码如下: /// <summary>/// 工厂方法 ...
- Factory Method工厂方法
"对象创建"模式 通过"对象创建"模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(以来具体类),从而支持对象创建的稳定.它是接口抽象之后的第一部工 ...
- Factory Method (工厂方法)---对象创建型模型
意图: 定义一个创建对象的接口,让子类决定实例化哪一个类. 别名: 虚构造器. 动机: 框架 使用 抽象类定义和维护对象之间的关系.这些对象的创建也由框架负责. 适用性: 当一个类,不知道它所必须创建 ...
- 08Factory Method(工厂方法)模式
技术交流QQ群:1027579432,欢迎你的加入! 1.对象创建模式 通过对象创建模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定,它是接口抽象之后 ...
- Factory Method vs Abstract Factory
点开这篇着你已经大致对工厂方法有了一定的了解.但为什么依然对这两者的区别不是很明白,在搜索了一天.看了许多文章后我有了一点想法,在这里分享并记录一下. 引用SO的一段文字: One differenc ...
- 设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- Java设计模式(一) -- 工厂方法模式
java的设计模式大体上分为三大类: •创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式. •结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组 ...
- 创建型模式:工厂模式(简单工厂+工厂方法+抽象工厂)
一.引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!& ...
最新文章
- Kafka 六战 RabbitMQ,这差距还不够明显吗?
- nyoj-754--黑心医生
- ITTC数据挖掘平台介绍(综述)——平台简介
- IDEA建立Spring MVC Hello World 详细入门教程
- HTML5 本地存储 Web Storage
- 采用DCT进行图像压缩
- Linux下autoconf与automake
- 微软物联网发掘万物互联的价值
- linux用户和组管理的实验报告,LINUX实验三 用户管理
- Nitrux 图标主题与 Faenza 一样的设计 – 漂亮
- Excel批量根据银行卡号查询银行卡的详细信息
- 微信公众号盈利模式_微信公众号的盈利方式有哪些?
- 6.1 CUDA: pinned memory固定存储
- snort实验(一)
- 龙芯平台常用OS 及下载链接
- 您的系统存在未授权的Bluetooth适配器,拔除或禁用该设备(蓝牙问题)
- 数据分析达人博客大全
- java 微博第三方登录_Connect/login - 微博API
- 农业银行面试计算机专业类知识,中国农业银行面试经验
- 用正交变换将二次型化为标准形
热门文章
- android的底部弹出框炫酷的样式,Android自定义底部弹出框ButtomDialog
- Oracle 11g 数据恢复 数据误删除后的恢复 0、执行 select log_mode from v$database;查看是否为归档模式 1、确定删除时间和被删除的表 04-23,GR
- 【转】javascript判断浏览器是不是IE
- Module build failed: TypeError: Cannot read property 'vue' of undefined
- 病毒行为分析初探(二)
- 《Web前端工程师修炼之道(原书第4版)》——移动Web
- HTML5矢量实现文件上传进度条
- 原创:CSS3技术-雪碧图自适应缩放与精灵动画方案
- UINavigationItem 设置UIBarButtonItem
- VBNET常用字符串常量