DesignPattern-Abstract Factory 修改

iOS 21种设计模式之抽象工厂(Abstract Factory) 原创Blog,转载请注明出处 http://blog.youkuaiyun.com/hello_hwc?viewmode=list 我的stackoverflow感谢感谢《Pro Objective-C Design Pattern for iOS》一书,这个博客系列由很多灵感源自次书。同时,也感谢Wiki以及一些博客博主。每篇文章最后,都会列出参考链接。这个系列的文章 工厂 抽象工厂 单例 原型 生成 阅读详情
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Design_Patterns
{
    
    //一系列相互依赖的对象 变化点是在有多种底板、墙和屋顶
    public interface Floor
    {
    }
    public interface Wall
    {
    }
    public interface Roof
    {
    }

    public class ChinaFloor : Floor
    {
    }
    public class ChinaWall : Wall
    {
    }
    public class ChinaRoof : Roof
    {
    }

    public class USAFloor : Floor
    {
    }
    public class USAWall : Wall
    {
    }
    public class USARoof : Roof
    {
    }

    public class FranceFloor : Floor
    {
    }
    public class FranceWall : Wall
    {
    }
    public class FranceRoof : Roof
    {
    }

    //抽象工厂
    public abstract class HouseFactory
    {
        public abstract Floor CreateFloor();
        public abstract Wall CreateWall();
        public abstract Roof CreateRoof();
    }
    public class ChinaHouseFactory : HouseFactory
    {
        public override Floor CreateFloor()
        {
            return new ChinaFloor();
        }

        public override Wall CreateWall()
        {
            return new ChinaWall();
        }

        public override Roof CreateRoof()
        {
            return new ChinaRoof();
        }
    }
    public class USAHouseFactory : HouseFactory
    {
        public override Floor CreateFloor()
        {
            return new USAFloor();
        }

        public override Wall CreateWall()
        {
            return new USAWall();
        }

        public override Roof CreateRoof()
        {
            return new USARoof();
        }
    }
    public class FranceHouseFactory : HouseFactory
    {
        public override Floor CreateFloor()
        {
            return new FranceFloor();
        }

        public override Wall CreateWall()
        {
            return new FranceWall();
        }

        public override Roof CreateRoof()
        {
            return new FranceRoof();
        }
    }

    //工厂方法  单系列产品种类是不定的,是变化的,不依赖 变化点是在有多种房子
    public abstract class House
    {
        private Floor f = null;

        public Floor F
        {
            get { return f; }
            set { f = value; }
        }

        private Wall[] w = null;

        public Wall[] W
        {
            get { return w; }
            set { w = value; }
        }

        private Roof r = null;

        public Roof R
        {
            get { return r; }
            set { r = value; }
        }

        public House()
        {
            GetHouse();
        }

        public abstract House GetHouse();
    }

    public class ChinaHouse : House
    {
        public override House GetHouse()
        {
            House h = new ChinaHouse();
            
            HouseFactory hf = new ChinaHouseFactory();
            Floor f = hf.CreateFloor();
            Wall w1 = hf.CreateWall();
            Wall w2 = hf.CreateWall();
            Wall w3 = hf.CreateWall();
            Wall w4 = hf.CreateWall();
            Roof r = hf.CreateRoof();

            h.F = f;
            h.W=new Wall[]{w1,w2,w3,w4};
            h.R = r;

            return h;
        }
    }

    public class USAHouse : House
    {
        public override House GetHouse()
        {
            House h = new USAHouse();

            HouseFactory hf = new USAHouseFactory();
            Floor f = hf.CreateFloor();
            Wall w1 = hf.CreateWall();
            Wall w2 = hf.CreateWall();
            Wall w3 = hf.CreateWall();
            Wall w4 = hf.CreateWall();
            Roof r = hf.CreateRoof();

            h.F = f;
            h.W = new Wall[] { w1, w2, w3, w4 };
            h.R = r;

            return h;
        }
    }


    public class CreateHouse
    {
        public void Test()
        {
            House chinah = new ChinaHouse();
            House usah = new USAHouse();
        }
    }
}


23种设计模式-抽象工厂(Abstract Factory)设计模式 软考中级-软件设计师 抽象工厂模式 阅读详情

相关推荐

C++设计模式_09_Abstract Factory 抽象工厂

/数据库访问有关的基类public://支持SQL Serverpublic://支持Oraclepublic://关联性//关联性因为这3个factory特别有相关性,那用1个factory就可以了,将这3个类放在一起,实现高内聚松耦合。大家看到这里就发现使用一个工厂,这就保证了关联性,解决了上面提到问题。从上面的代码可以看出Abstract Factory 其实被称为。

分享学习成长历程,Winter is coming! 327

Factory模式和Abstract Factory模式

看了设计模式。又读了一些其他的资料。对里面的Factory模式和Abstract Factory模式有所了解。工厂模式一般对应比较简单的模型。抽象工厂模式对应复杂点的模型。 你会建立一个专门生产Sample实例的工厂:  public class Factory{  public static Sample creator(int which){

WHW1984的专栏 1016

二次规划问题(qp)和序列二次规划问题(sqp)的简单理解

当二次规划的约束为非线性约束时,通常会采用sqp进行求解,用连续求解qp的方法来得到非线性约束条件下的最优解,上述的qpoases和osqp均无法直接求解非线性约束问题,所以如果使用这两个库的话,注意,sqp是结果,而不是原因,只有在非线性约束的情况下才会考虑sqp求解,如果问题本身就是线性约束,则直接用qp解就行。对于工程师而言,我们在编写代码的时候,并不关心二次规划问题的求解细节,所以一般是把二次规划问题建立好后,直接调用三方库进行求解。因为约束为非线性约束,所以先将约束进行线性化,约束原方程为。

zmhzmhzm的博客 1万+

java对系统功能的扩展性_Java 可扩展性与设计模式

java之设计模式与扩展性获得最大限度复用的关键在于对新需求和现有需求发生变化的预见性,要求系统具有良好的扩展性。一个扩展性不好的设计会导致维护代价的增加,甚至导致重构。设计模式可以确保系统能以特定方式变化,提高扩展性,从而避免重构。每一个设计模式允许系统结构的某个方面的变化独立于其他方面,这样产生的系统对于某一特殊变化更加健壮。以下一些导致重构的原因,以及解决这些问题的设计模式:1、通过显示地...

weixin_30717229的博客 980

ArduPilot 的 RTOS 选择:为何 ChibiOS 成为现代飞控的首选

本文深入探讨了ArduPilot选择ChibiOS作为现代飞控首选RTOS的原因。通过对比FreeRTOS和NuttX,ChibiOS凭借其50ns中断响应、1.2μs上下文切换时间和高效的资源管理脱颖而出,特别适合处理无人机飞控中的高频传感器融合和实时控制任务。文章还详细分析了ChibiOS在STM32硬件上的优化实践及其在无人机开发中的显著优势。

weixin_29161719的博客 569

魔百和CM211-1刷Armbian全流程:从安卓盒子到Linux服务器的完美变身

本文详细介绍了如何将魔百和CM211-1机顶盒刷入Armbian系统,实现从安卓盒子到Linux服务器的完美变身。涵盖硬件兼容性验证、固件选择、刷机流程、系统优化及常见问题解决,特别适合技术爱好者低成本搭建家庭NAS或开发环境。

weixin_30329623的博客 239

设计模式-Abstract Factory模式

        还是一个创造型模式,可以简单的认为,创造型模式就是对用户使用new的一个封装,封装作为面向对象一个重要的特性,它绝对不是一对大括号那么简单,他重要的是封装变化点.如果没有变化,那就别封装吧,直接让用户new吧,这样效率是最高的,但因为会有变化,所以才会有面向对象和设计模式.抽象工厂是应对这样的一系列变化的,比如我们最初需要一个road类,用以表现我们游戏项目的道路,那么,我们可以简

Lance的专栏 746

告别迷茫!用C#和Windows.Devices.Bluetooth搞定BLE设备连接与数据收发(附完整代码)

本文详细介绍了如何使用C#和Windows.Devices.Bluetooth命名空间实现BLE设备连接与数据收发。从开发环境配置到设备扫描、服务发现、数据通信及资源管理,提供完整代码示例和实战技巧,帮助开发者快速掌握低功耗蓝牙开发,解决连接稳定性和异常处理等常见问题。

weixin_29248653的博客 505

设计模式 - 概览与总结 & 面向对象6大原则

1. 设计模式列表 1.1 创建型模式 1.1.1 Abstract Factory 1.1.2 Builder 1.1.3 Factory Method 1.1.4 Prototype 1.1.5 Singleton 1.2 结构型模式 1.2.1 Adapter 1.2.2 Bridge 1.2.3 Composite 1.2.4 Decorator 1.2.5 Facade 1.2.6 Flyweight 1.2.7 Proxy 1.3 行为型模式 1.3.1 Chain of Responsibil

weixin_42254177的博客 147

TI Sitara PRU可编程实时单元:工业自动化中的硬实时协处理器解析

在嵌入式系统与工业自动化领域,实时性和确定性是核心需求。实时性指系统对外部事件做出响应的可预测时间,确定性则要求响应时间严格一致,不受其他任务干扰。其技术原理通常通过专用硬件或实时操作系统实现,例如采用独立于主CPU的协处理器来处理高精度时序任务。这种设计的技术价值在于,它能将主CPU从高实时性要求的任务中解放出来,专注于复杂业务逻辑,同时确保关键IO操作达到纳秒级延迟和极低抖动。应用场景广泛覆盖伺服电机控制、工业通信协议加速和多接口扩展等。本文聚焦的TI Sitara系列PRU(可编程实时单元),正是此类

weixin_42526068的博客 284

Stata实战:用双向固定效应模型分析房价,从数据清洗到结果解读(附完整代码)

本文详细介绍了如何使用Stata实现房价数据的双向固定效应模型分析,从数据清洗到结果解读的全流程。通过具体代码示例,帮助读者掌握面板模型的应用技巧,特别适合经济学和金融学研究者进行房价影响因素分析。

weixin_31528001的博客 277

好书整理系列之-设计模式:可复用面向对象软件的基础 3

第3章创建型模式创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。随着系统演化得越来越依赖于对象复合而不是类继承,创建型模式变得更为重要。当这种情况发生时,重心从对一组固定行为的硬编码( h a r d - c o d i n g)转移为定义一个较小的基本行为集,这些行为可以被...

mmdev 148

基于YOLOv5s的RK3588多线程部署16FPS暴涨到120FPS 轻量化深度学习部署实战教程(包括性能优化与加速)37

本文介绍了如何在RK3588平台上利用线程池优化YOLOv5模型的推理性能。RK3588内置3个NPU核心,支持多核并行处理。作者设计了一个线程池架构:1个线程负责数据读取,10个线程处理NPU运算,1个线程输出结果。该架构包含任务队列、线程管理和工作线程三个核心组件,通过合理设置线程数、任务队列大小等参数确保性能稳定。文章提供了详细的C++实现代码,包括线程池初始化、任务提交、结果获取等功能模块,并讨论了多线程同步和内存管理的关键技术要点。该方案可显著提升深度学习模型在嵌入式设备上的部署效率。

FJN110的博客 9230

Java 设计模式之路《二》抽象工厂模式

Java 设计模式之路 - 抽象工厂模式(Abstract Factory)     抽象工厂模式(Abstract Factory)   工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就要用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就...

博客颜色 189

YOLOv8的二次创新 | 结合iRMB与EMA打造全新的iEMA机制,提升动态检测性能【附保姆级代码】

YOLOv8继承了YOLO系列的轻量化和高效检测特性,同时通过改进的架构设计使得其在实时场景下具有更高的检测精度。然而,随着检测需求的增加,尤其是在动态目标检测和长时间序列检测中,YOLOv8的鲁棒性依然可以提升。通过iEMA机制的引入,我们将在这些方面进行进一步优化。iRMB模块是我们对传统Residual Block的进一步改进。通过多层特征提取,iRMB能够捕捉更多层次的特征信息,并通过引入轻量化的残差结构,提升计算效率。

一键难忘的博客 3085

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

利用XML实现通用WEB报表打印(5)

方案扩充:   那么如何打印一些特殊形态的图表,前文中已经提到,采用本方案可以非常方便的定义出自己所需要的标签,在理论上可以打印出任何样式的特殊图表。因此本文打算详细介绍一下增加自己定义的标签扩充打印格式的具体过程。  先假设我们的客户看了打印效果后基本上满意,但是还有觉得一点不足,如果需要打印一些图表怎么办?例如折线图、K线图、饼状图、柱状图等等。使用我们现有的标签就不行了,所以我们

tangkuai的专栏 1157

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

2020年个人错题整理--2026.3.16

7、在软件架构中,从不同的视角描述特定系统的体系结构,从而得到多个视图,并将这些视图组织起来以描述整体的软件架构模型。因此,在考虑体系结构时,可以从不同的视角来检查,这促使软件设计师考虑体系结构的不同属性。例如,展示功能组织的。来记录设计元素的功能和概念接口,设计元素的功能定义了它本身在系统中的角色,这些角色包括功能、性能等。8、针对二层C/S软件架构的缺点,三层C/S架构应运而生。模式将复杂对象:的构建与其表示相分离,这样相同的构造过程可以创建不同的对象。服务器的延迟的主要因素是队列延迟和磁盘IO延迟。

wxm631的博客 65

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

《设计模式》之Creational模式:Abstract Factory

对象创建:Abstract Factory 目的 提供一个可以创建一族关联的或者依赖的对象,而不需要指定它们具体的类。 有时也可称为 Kit 驱动 假设有一个用户接口工具箱,它可以支持多种不同的观感标准,例如Motif和Presentation Manager。不同的观感标准定义了不同的外观和用户界面行为,例如滚动条、窗口和按钮。要想在不同的观感标准之间方便的迁移,一个应用不应该写

天天吃吃 706

设计模式-抽象工厂 abstract_factory

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式用于创建一系列相关或依赖对象的接口,而无需指定它们具体的类具体工厂生产具体产品具体工厂继承抽象工厂具体产品继承抽象产品抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,用于创建一系列相关或依赖对象的接口,而无需指定它们具体的类。这种模式允许系统独立于具体类的变化,从而提高了系统的灵活性和可扩展性。定义产品接口:为不同的产品族定义一个或多个抽象接口。创建具体产品类。

wesigj的博客 1750

23种设计模式之抽象工厂模式(Abstract Factory Pattern)

本篇文章将23种设计模式中的抽象工厂模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 2万+

设计模式之ABSTRACT FACTORY

<br />20101128:<br />初始ABSTRACT FACTORY,一点也不懂啊!<br />翻看着前前后后的章节,反复的看了两三遍,似乎懂了一些:<br />所谓抽象工厂,就是在声明一个抽象类,声明了生产不同“产品”的方法,而不定义实现方法,实现方法由具体的“产品”决定,具体生产何种产品并不固定,而是取决于其参数(可以是类、整型、等等),生产不同的“产品”需定义不同的类,在不同产品的类中定义相应的实现方法。<br /> <br />!!标记

北风 494

设计模式-抽象工厂模式(Abstract Factory)

抽象工厂是一种创建型设计模式,它能创建一系列相关的对象,而无需指定其具体类。

紫荆鱼的博客 1931

设计模式笔记(1 ABSTRACT FACTORY & BUILDER)

设计模式的书已经被翻的很旧了,最近,似乎开始明白书中讲述的内容了.还是把心得体会记录下来,算是一个脚印.1.   ABSTRACT FACTORY(抽象工厂)适用性:一个系统要独立于其产品的创建时.一个系统要由多个产品系列中的一个来配置时.强调一个产品系列从而联合使用时.为一个产品库提供接口,屏蔽实现时.理解:抽象工厂通常作用于多个类似的类系列上,每个系列中,有着基本一致的类元素,或者说,可以为

不亦快斋 1968

「聊设计模式」之抽象工厂模式(Abstract Factory)

🏆本文收录于《聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎持续关注&&收藏&&订阅!

**My Coding Family** 1242

设计模式-抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式 定义 抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类。 现在看不明白没关系,坚持看到最后,并且把例子看懂,再来多体会几遍就能明白了。 类型 创建型。 适用场景 应用层不依赖于产品类实例如何被创建、实现等细节。 强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复代码。 提供一个产品类的库,所有的产品以同样的接口出现,从而使得应用...

kaven 4903
上一篇: DesignPattern-Abstract Factory
下一篇: DesignPattern-Builder
andycode
博客等级 码龄17年 12粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值