从耦合关系谈起
      耦合关系直接决定着软件面对变化时的行为
      – 模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之更改
      – 模块与模块之间的松耦合使得软件面对变化时,一些模块更容易被替换或者更改,但其他模块保持不变

动机(Motivation)
      在软件系统中,经常面临着“某个对象”的创建工作;由于需求的变化,这个对象经常面临着剧烈的变化,但是它却拥有比较稳定的接口。
      如何应对这种变化?如何提供一种“封装机制”来隔离出“这个易变对象”的变化,从而保持系统中

意图(Intent)
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。——《设计模式》GoF

结构(Structure)

Factory Method模式的几个要点

  1. Factory Method模式主要用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合关系会导致软件的脆弱。
  2. Factory Method模式通过面向对象的手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展(而非更改)的策略,较好地解决了这种紧耦合关系。
  3. Factory Method模式解决“单个对象”的需求变化,Abstract Factory 模式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。

代码:

代码

using System;
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 工厂方法相关推荐

  1. Factory Method工厂方法模式

    定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类,属于创建型模式 在此模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类负责生产 ...

  2. 3.Factory Method 工厂方法模式(创建型模式)

    1.定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使得一个类的实例化延迟到子类. 2.实现代码如下: /// <summary>/// 工厂方法 ...

  3. Factory Method工厂方法

    "对象创建"模式 通过"对象创建"模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(以来具体类),从而支持对象创建的稳定.它是接口抽象之后的第一部工 ...

  4. Factory Method (工厂方法)---对象创建型模型

    意图: 定义一个创建对象的接口,让子类决定实例化哪一个类. 别名: 虚构造器. 动机: 框架 使用 抽象类定义和维护对象之间的关系.这些对象的创建也由框架负责. 适用性: 当一个类,不知道它所必须创建 ...

  5. 08Factory Method(工厂方法)模式

    技术交流QQ群:1027579432,欢迎你的加入! 1.对象创建模式 通过对象创建模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定,它是接口抽象之后 ...

  6. Factory Method vs Abstract Factory

    点开这篇着你已经大致对工厂方法有了一定的了解.但为什么依然对这两者的区别不是很明白,在搜索了一天.看了许多文章后我有了一点想法,在这里分享并记录一下. 引用SO的一段文字: One differenc ...

  7. 设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  8. Java设计模式(一) -- 工厂方法模式

    java的设计模式大体上分为三大类: •创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式. •结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组 ...

  9. 创建型模式:工厂模式(简单工厂+工厂方法+抽象工厂)

    一.引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!& ...

最新文章

  1. Kafka 六战 RabbitMQ,这差距还不够明显吗?
  2. nyoj-754--黑心医生
  3. ITTC数据挖掘平台介绍(综述)——平台简介
  4. IDEA建立Spring MVC Hello World 详细入门教程
  5. HTML5 本地存储 Web Storage
  6. 采用DCT进行图像压缩
  7. Linux下autoconf与automake
  8. 微软物联网发掘万物互联的价值
  9. linux用户和组管理的实验报告,LINUX实验三   用户管理
  10. Nitrux 图标主题与 Faenza 一样的设计 – 漂亮
  11. Excel批量根据银行卡号查询银行卡的详细信息
  12. 微信公众号盈利模式_微信公众号的盈利方式有哪些?
  13. 6.1 CUDA: pinned memory固定存储
  14. snort实验(一)
  15. 龙芯平台常用OS 及下载链接
  16. 您的系统存在未授权的Bluetooth适配器,拔除或禁用该设备(蓝牙问题)
  17. 数据分析达人博客大全
  18. java 微博第三方登录_Connect/login - 微博API
  19. 农业银行面试计算机专业类知识,中国农业银行面试经验
  20. 用正交变换将二次型化为标准形

热门文章

  1. android的底部弹出框炫酷的样式,Android自定义底部弹出框ButtomDialog
  2. Oracle 11g 数据恢复 数据误删除后的恢复 0、执行 select log_mode from v$database;查看是否为归档模式 1、确定删除时间和被删除的表 04-23,GR
  3. 【转】javascript判断浏览器是不是IE
  4. Module build failed: TypeError: Cannot read property 'vue' of undefined
  5. 病毒行为分析初探(二)
  6. 《Web前端工程师修炼之道(原书第4版)》——移动Web
  7. HTML5矢量实现文件上传进度条
  8. 原创:CSS3技术-雪碧图自适应缩放与精灵动画方案
  9. UINavigationItem 设置UIBarButtonItem
  10. VBNET常用字符串常量