2.设计模式-Abstract Factory 抽象工厂模式
大神勿喷,不对的地方请指出来,学笔记而已。
解决的问题:应对多系列对象构建的变化或多系列(例如:崎岖的山路和平坦的马路属于一个系列) 不断的变化的创建。
使用场景:对象不变(比如有3个对象 "路, 房子, 湖" 这些不能有增加或者减少),系列经常变,并且比较多(”路“对象 包含崎岖的山路和平坦的马路等)
针对上图用代码表示:
- public abstract class AbstractProductA
- {
- }
- public abstract class AbstractProductB
- {
- }
- public abstract class AbatractFactory
- {
- public abstract AbstractProductA CreateAbstractProductA();
- public abstract AbstractProductB CreateAbstractProductB();
- }
- public class ConcreteAbstractProductA : AbstractProductA
- {
- }
- public class ConcreteAbstractProductB : AbstractProductB
- {
- }
- //实例1
- public class ConcreteFactroy1 : AbatractFactory
- {
- public override AbstractProductA CreateAbstractProductA()
- {
- return new ConcreteAbstractProductA();//ProductA1
- }
- public override AbstractProductB CreateAbstractProductB()
- {
- return new ConcreteAbstractProductB();//ProductB1
- }
- }
- //实例2
- public class ConcreteFactroy2 : AbatractFactory
- {
- public override AbstractProductA CreateAbstractProductA()
- {
- return new ConcreteAbstractProductA();//ProductA2
- }
- public override AbstractProductB CreateAbstractProductB()
- {
- return new ConcreteAbstractProductB();//ProductB2
- }
- }
- //Client
- public class ClientManager
- {
- public AbatractFactory m_abatractFactory;
- public ClientManager(AbatractFactory abatractFactory)
- {
- m_abatractFactory = abatractFactory;
- }
- public AbstractProductA abstractProductA;
- public AbstractProductB abstractProductB;
- public void BuildProduct()
- {
- abstractProductA = m_abatractFactory.CreateAbstractProductA();
- abstractProductB = m_abatractFactory.CreateAbstractProductB();
- }
- }
- public class Operator
- {
- //实例出不同的实例
- public void TestFactory()
- {
- ClientManager client1Manager = new ClientManager( new ConcreteFactroy1());
- client1Manager.BuildProduct();
- ClientManager client2Manager = new ClientManager(new ConcreteFactroy2());
- client2Manager.BuildProduct();
- }
- }
2.设计模式-Abstract Factory 抽象工厂模式的更多相关文章
- 一天一个设计模式——Abstract Factory抽象工厂模式
一.模式说明 前面学习了工厂方法(Factory Method)模式.在工厂方法模式中,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类,具体的处理交由子类来处理.这里学习的抽象工厂 ...
- 设计模式(一): abstract factory抽象工厂模式 -- 创建型模式
1.定义 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 2.适用场景 1.一个系统要独立于它的产品创建.组合和表示. 2.一个系统要由多个产品系列中的一个来配置. 3.当你要 ...
- c++ 设计模式9 (Abstract Factory 抽象工厂模式)
5.2 抽象工厂模式 动机:在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时,由于需求的变化,往往存在更多系列对象的创建工作. 代码示例: 实现利用数据库的业务逻辑,支持多数据库(Sq ...
- Java设计模式:Abstract Factory(抽象工厂)模式
概念定义 抽象工厂(Abstract Factory)模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式中,系统的产品有多于一个的产品族(一个产品族里定义多个产品) ...
- 面向对象设计模式纵横谈:Abstract Factory 抽象工厂模式(笔记记录)
今天是设计模式的第二讲,抽象工厂的设计模式,我们还是延续老办法,一步一步的.演变的来讲,先来看看一个对象创建的问题. 1.如何创建一个对象 常规的对象创建方法: 这样的创建对象没有任何问题, ...
- Abstract Factory抽象工厂模式
抽象工厂模式是是用一个超级工厂去创建其他工厂,简单点说就是工厂的父类,属于创建型模式. 目标:提供一个创建一组对象的方法,而无需指定它们具体的类(同工厂方法). 使用场景:系统的产品有多于一个的产品族 ...
- Abstract Factory 抽象工厂模式
提供一个创建一些列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂顾名思义就是对工厂的抽象,它提供了一组创建抽象产品对象的操作接口,我们实际使用的是抽象工厂的派生类,派生类中提供了操作的具 ...
- 设计模式 -- Abstract Factory 抽象工厂
1.常规的对象创建方法 //创建一个Road对象 Road road=new Road(); new的问题:实现依赖,不能应对“具体实例化类型”额变化. 解决思想: 封装变化点--哪里变化,封装哪里( ...
- 设计模式02: Abstract Factory 抽象工厂(创建型模式)
Abstract Factory 抽象工厂(创建型模式) 常见的对象创建方法: //创建一个Road对象 Road road=new Road(); new的问题: -实现依赖 ...
随机推荐
- WUSTOJ 1305: 最短路(Java)
题目链接:
- redis原理及集群主从配置
一.简介 存储系统背景 存储系统有三类: RDBMS oracle,dh2,postgresql,mysql,sql server NoSQL: KV NoSQL:redis,memcached 列式 ...
- App功能测试点总结
1.手机操作系统android(谷歌).ios(苹果).Windows phone(微软).Symbian(诺基亚).BlackBerry OS(黑莓).windows mobile(微软),目前主流 ...
- JQuery 的优先级
1.使用最新的jQuery版本 2.用对选择器. 2.1 jquery最快的选择器是ID选择器:来源于js的getElementById()方法 注释:需要选择多个元素,必然涉及到Dom遍历和循环 ...
- GRPC代替webapi Demo。
gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架. gRPC 的主要优点是: 现代高性能轻量级 RPC 框架. 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现. 可用 ...
- 3_PHP表达式_5_数据类型转换_类型自动转换
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. PHP类型转换分为类型自动转换和类型强制转换. 1.布尔型数据参与算数运算时,TRUE被转换为整数1,FALSE被 ...
- hystrix配置
一.hystrix在生产中的建议 1.保持timeout的默认值(1000ms),除非需要修改(其实通常会修改) 2.保持threadpool的的线程数为10个,除非需要更多 3.依赖标准的报警和监控 ...
- TR-FS00会计科目创建GL_ACCT_MASTER_SAVE
https://blog.csdn.net/z_x_xing_/article/details/90514715 GL_ACCT_MASTER_SAVE 创建总账科目 前台事务代码:FS00 函数 ...
- Django的结构
一.Django的结构 二.静态文件的配置 STATIC_URL = '/static/' # HTML中使用的静态文件夹前缀 STATICFILES_DIRS = [ os.path.join(BA ...
- NSIP
1. 第一章 信息安全概述 信息:信息是有意义的数据,具有一定的价值,是一种适当保护的资产,数据是是客观事务属性的记录,是信息的具体表现形式,数据经过加工处理之后 就是信息,而信息需要经过数字处理转换 ...