大神勿喷,不对的地方请指出来,学笔记而已。

解决的问题:应对多系列对象构建的变化或多系列(例如:崎岖的山路和平坦的马路属于一个系列) 不断的变化的创建。

使用场景:对象不变(比如有3个对象 "路, 房子, 湖" 这些不能有增加或者减少),系列经常变,并且比较多(”路“对象 包含崎岖的山路和平坦的马路等)

针对上图用代码表示:

  1. public abstract class AbstractProductA
  2. {
  3.  
  4. }
  5.  
  6. public abstract class AbstractProductB
  7. {
  8.  
  9. }
  10.  
  11. public abstract class AbatractFactory
  12. {
  13. public abstract AbstractProductA CreateAbstractProductA();
  14.  
  15. public abstract AbstractProductB CreateAbstractProductB();
  16. }
  17.  
  18. public class ConcreteAbstractProductA : AbstractProductA
  19. {
  20.  
  21. }
  22.  
  23. public class ConcreteAbstractProductB : AbstractProductB
  24. {
  25.  
  26. }
  27.  
  28. //实例1
  29. public class ConcreteFactroy1 : AbatractFactory
  30. {
  31. public override AbstractProductA CreateAbstractProductA()
  32. {
  33. return new ConcreteAbstractProductA();//ProductA1
  34. }
  35.  
  36. public override AbstractProductB CreateAbstractProductB()
  37. {
  38. return new ConcreteAbstractProductB();//ProductB1
  39. }
  40. }
  41.  
  42. //实例2
  43. public class ConcreteFactroy2 : AbatractFactory
  44. {
  45. public override AbstractProductA CreateAbstractProductA()
  46. {
  47. return new ConcreteAbstractProductA();//ProductA2
  48. }
  49.  
  50. public override AbstractProductB CreateAbstractProductB()
  51. {
  52. return new ConcreteAbstractProductB();//ProductB2
  53. }
  54. }
  55.  
  56. //Client
  57. public class ClientManager
  58. {
  59. public AbatractFactory m_abatractFactory;
  60.  
  61. public ClientManager(AbatractFactory abatractFactory)
  62. {
  63. m_abatractFactory = abatractFactory;
  64. }
  65.  
  66. public AbstractProductA abstractProductA;
  67. public AbstractProductB abstractProductB;
  68.  
  69. public void BuildProduct()
  70. {
  71. abstractProductA = m_abatractFactory.CreateAbstractProductA();
  72.  
  73. abstractProductB = m_abatractFactory.CreateAbstractProductB();
  74. }
  75. }
  76.  
  77. public class Operator
  78. {
  79. //实例出不同的实例
  80. public void TestFactory()
  81. {
  82. ClientManager client1Manager = new ClientManager( new ConcreteFactroy1());
  83. client1Manager.BuildProduct();
  84.  
  85. ClientManager client2Manager = new ClientManager(new ConcreteFactroy2());
  86. client2Manager.BuildProduct();
  87. }
  88. }

2.设计模式-Abstract Factory 抽象工厂模式的更多相关文章

  1. 一天一个设计模式——Abstract Factory抽象工厂模式

    一.模式说明 前面学习了工厂方法(Factory Method)模式.在工厂方法模式中,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类,具体的处理交由子类来处理.这里学习的抽象工厂 ...

  2. 设计模式(一): abstract factory抽象工厂模式 -- 创建型模式

    1.定义 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 2.适用场景 1.一个系统要独立于它的产品创建.组合和表示. 2.一个系统要由多个产品系列中的一个来配置. 3.当你要 ...

  3. c++ 设计模式9 (Abstract Factory 抽象工厂模式)

    5.2 抽象工厂模式 动机:在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时,由于需求的变化,往往存在更多系列对象的创建工作. 代码示例: 实现利用数据库的业务逻辑,支持多数据库(Sq ...

  4. Java设计模式:Abstract Factory(抽象工厂)模式

    概念定义 抽象工厂(Abstract Factory)模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式中,系统的产品有多于一个的产品族(一个产品族里定义多个产品) ...

  5. 面向对象设计模式纵横谈:Abstract Factory 抽象工厂模式(笔记记录)

         今天是设计模式的第二讲,抽象工厂的设计模式,我们还是延续老办法,一步一步的.演变的来讲,先来看看一个对象创建的问题. 1.如何创建一个对象 常规的对象创建方法: 这样的创建对象没有任何问题, ...

  6. Abstract Factory抽象工厂模式

    抽象工厂模式是是用一个超级工厂去创建其他工厂,简单点说就是工厂的父类,属于创建型模式. 目标:提供一个创建一组对象的方法,而无需指定它们具体的类(同工厂方法). 使用场景:系统的产品有多于一个的产品族 ...

  7. Abstract Factory 抽象工厂模式

    提供一个创建一些列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂顾名思义就是对工厂的抽象,它提供了一组创建抽象产品对象的操作接口,我们实际使用的是抽象工厂的派生类,派生类中提供了操作的具 ...

  8. 设计模式 -- Abstract Factory 抽象工厂

    1.常规的对象创建方法 //创建一个Road对象 Road road=new Road(); new的问题:实现依赖,不能应对“具体实例化类型”额变化. 解决思想: 封装变化点--哪里变化,封装哪里( ...

  9. 设计模式02: Abstract Factory 抽象工厂(创建型模式)

    Abstract Factory 抽象工厂(创建型模式) 常见的对象创建方法:    //创建一个Road对象    Road road=new Road();    new的问题:    -实现依赖 ...

随机推荐

  1. ELK基础配置

    前言 近期在研究日志系统的设计,感觉现在公司的子系统和接口太多了,日志看不过来,就想着有没有一种方法可以把各个程序的日志组合到一起.于是乎就搜到了ELK.开始对ELK的概念完全搞不懂,就照着各个平台文 ...

  2. 简单即时通讯、聊天室--java NIO版本

    实现的功能: 运行一个服务端,运行多个客户端.在客户端1,发送消息,其余客户端都能收到客户端1发送的消息. 重点: 1.ByteBuffer在使用时,注意flip()方法的调用,否则读取不到消息. 服 ...

  3. Map、FlatMap 和 Reduce

    Map 作用是生成一个新数组,遍历原数组,将每个元素拿出来做一些变换然后 append 到新的数组中. [1, 2, 3].map((v) => v + 1) // -> [2, 3, 4 ...

  4. flutter从入门到精通三

    flutter可以通过一套代码运行在多个平台上,包括移动,web,桌面,嵌入式,但是在 Web 平台的支持尚未达到 Beta 阶段,请不要用在生产环节,在阅读文档时候,推荐大家阅读https://fl ...

  5. 在论坛中出现的比较难的sql问题:10(删除多表中的同一个外键)

    原文:在论坛中出现的比较难的sql问题:10(删除多表中的同一个外键) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

  6. 常用NLog配置

    <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSe ...

  7. C#从零单排上王者系列---数据类型

    从零单排系列简介 突然发现自己的基础不是很牢固,就买了一个<C#7.0的本质论>.本系列博客就是以此书为本,记录自己的学习心得,如果你的基础也不牢固,不如跟上博主一起学习成长呀! 本篇博客 ...

  8. KaiWu 的体验

    KaiWu 的体验 来源 https://www.zhihu.com/question/28950444 >>>>>>>>>>>> ...

  9. 常见User-Agent大全

    window.navigator.userAgent 1) Chrome Win7: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KH ...

  10. Harbor高可用理论及实践(汇聚篇)

    目录 一.理论概述 什么是harbor harbor要解决的问题 有了docker自带的registry为什么还要用harbor harbor的架构组件 Harbor工作原理 二.部署harbor及其 ...