C#设计模式--工厂模式和抽象工厂模式
话说有三大潮牌公司一直相互PK,有一天举办了一个活动让这三大公司来一个PK,我们来看看哪家公司的上衣做出来好看穿得舒服
现在我们有一个上衣的抽象产品让三大公司来做
//抽象产品 public interface Jacket { //上衣 void Jk(); }
三大公司就开始设计上衣
//CDS公司 public class CDS : Jacket { public void Jk() { Console.WriteLine("我是CDS上衣"); } } //KKW公司 public class KKW : Jacket { public void Jk() { Console.WriteLine("我是KKW上衣"); } } //DSN公司 public class DSN : Jacket { public void Jk() { Console.WriteLine("我是DSN上衣"); } }
设计的上衣差不多了开始要拿去给工厂加工了
//抽象工厂类 public interface ComPanyFactory { //上衣工厂 Jacket CreateJacket(); } //CDS工厂 public class CDSFactory : ComPanyFactory { public Jacket CreateJacket() { return new CDS(); } } //KKW工厂 public class KKWFactory : ComPanyFactory { public Jacket CreateJacket() { return new KKW(); } } //DSN工厂 public class DSNFactory : ComPanyFactory { public Jacket CreateJacket() { return new DSN(); } }
生产好的上衣要给大家看
ComPanyFactory cpf = new CDSFactory(); Jacket CDSJ = cpf.CreateJacket(); CDSJ.Jk(); ComPanyFactory cpf2 = new KKWFactory(); Jacket KKWJ = cpf2.CreateJacket(); KKWJ.Jk(); ComPanyFactory cpf3 = new DSNFactory(); Jacket DSNJ = cpf3.CreateJacket(); DSNJ.Jk(); Console.ReadKey();
大家看了这三件上衣都挺不错的不分上下, 既然这个系列分不出高低, 再设计一个系列, 这次我们设计一个裤子吧。
public interface Pants { //裤子 void Pant(); }
三家公司开始设计裤子
public class CDSPants : Pants { public void Pant() { Console.WriteLine("我是CDS裤子"); } } public class KKWPants : Pants { public void Pant() { Console.WriteLine("我是KKW裤子"); } } public class DSNPants : Pants { public void Pant() { Console.WriteLine("我是DSN裤子"); } }
//抽象工厂类 public interface ComPanyFactory { //上衣工厂 Jacket CreateJacket(); //裤子工厂 Pants CreatePants(); } //CDS工厂 public class CDSFactory : ComPanyFactory { public Jacket CreateJacket() { return new CDS(); } public Pants CreatePants() { return new CDSPants(); } } //KKW工厂 public class KKWFactory : ComPanyFactory { public Jacket CreateJacket() { return new KKW(); } public Pants CreatePants() { return new KKWPants(); } } //DSN工厂 public class DSNFactory : ComPanyFactory { public Jacket CreateJacket() { return new DSN(); } public Pants CreatePants() { return new DSNPants(); } }
ComPanyFactory cpf = new CDSFactory(); Jacket CDSJ = cpf.CreateJacket(); CDSJ.Jk(); Pants CDSP = cpf.CreatePants(); CDSP.Pant(); ComPanyFactory cpf2 = new KKWFactory(); Jacket KKWJ = cpf2.CreateJacket(); KKWJ.Jk(); Pants KKWP = cpf2.CreatePants(); KKWP.Pant(); ComPanyFactory cpf3 = new DSNFactory(); Jacket DSNJ = cpf3.CreateJacket(); DSNJ.Jk(); Pants DSNP = cpf3.CreatePants(); DSNP.Pant(); Console.ReadKey();
效果图:
个人总结:
工厂模式只能设计一个系列的产品, 再添加系列产品的时候就是抽象工厂模式。
抽象工厂的优点: 生产上衣裤子不管是哪间公司生产都会很快速的生产出来只需要继承抽象产品类和抽象工厂类
缺点:在生产裤子的时候要再写抽象产品接口,工厂要再添加接口方法子类再写一次工厂类方法
C#设计模式--工厂模式和抽象工厂模式的更多相关文章
- 设计模式之工厂模式VS抽象工厂
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- Java设计模式(三) 抽象工厂模式
原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...
- Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)
工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...
- 设计模式的征途—3.抽象工厂(Abstract Factory)模式
上一篇的工厂方法模式引入了工厂等级结构,解决了在原来简单工厂模式中工厂类职责太重的原则,但是由于工厂方法模式的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,从而增加系统开销.那么,我们应该 ...
- 设计模式(3)抽象工厂模式(Abstract Factory)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 源码地址 0 抽象工厂模式简介 0.0 抽象工厂模式定义 抽象工厂 ...
- 设计模式的征途—4.抽象工厂(Abstract Factory)模式
上一篇的工厂方法模式引入了工厂等级结构,解决了在原来简单工厂模式中工厂类职责太重的原则,但是由于工厂方法模式的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,从而增加系统开销.那么,我们应该 ...
- Java设计模式之【工厂模式】(简单工厂模式,工厂方法模式,抽象工厂模式)
Java设计模式之[工厂模式](简单工厂模式,工厂方法模式,抽象工厂模式) 工厂模式出现的原因 在java中,创建一个对象最简单的方法就是使用new关键字.但在一些复杂的业务逻辑中,创建一个对象不只需 ...
- 设计模式(Python)-简单工厂,工厂方法和抽象工厂模式
本系列文章是希望将软件项目中最常见的设计模式用通俗易懂的语言来讲解清楚,并通过Python来实现,每个设计模式都是围绕如下三个问题: 为什么?即为什么要使用这个设计模式,在使用这个模式之前存在什么样的 ...
- 设计模式3---工厂模式(Factory Pattern简单工厂、工厂方法、抽象工厂)
工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...
- Java设计模式(3)——创建型模式之抽象工厂模式(Abstract Factory)
一.概述 抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象. UML图: 其他的过多概念不再 ...
随机推荐
- 9.redis安全
转自:http://www.runoob.com/redis/redis-tutorial.html Redis 安全 我们可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis ...
- popup non topmost
public class PopupNonTopmost : Popup { public static DependencyProperty TopmostProperty = Window.Top ...
- 结对作业——四则运算 Part3. 对于结对编程的总结与思考
结对作业——四则运算 Part3. 对于结对编程的总结与思考 PB15061303 刘梓轩PB16061489 艾寅中 GITHUB 地址 戳这里 目录 Part 1. Core代码编写部分 Part ...
- Linux实战教学笔记34:企业级监控Nagios实践(上)
一,Nagios监控简介 生活中大家应该对监控已司空见惯了,例如:餐馆门前的监控探头,小区里的视频监控,城市道路告诉监控探头等,这些监控的目的大家都很清楚,无须多说.那么,企业工作中为什么要部署监控系 ...
- delete属性
- JavaScript怎么让字符串和JSON相互转化
var obj = str.parseJSON(); //由JSON字符串转换为JSON对象 var obj = JSON.parse(str); //由JSON字符串转换为JSON对象
- 解剖Nginx·自动脚本篇(2)设置初始变量脚本 auto/init
在configure中运行完auto/options脚本后,接着运行auto/init脚本,其中所做的工作如下. 1 Makefile文件名变量 默认情况下是: objs/Makefile 代码如下: ...
- 【Unity】Collider随骨骼动画运动
Collider位置和角色的动作不一致会导致Mesh互相镶嵌,让游戏失真. 想象一扇门的Collider没随它打开的动画移动,结果就是你看着门开着却穿不过去. 而我遇到的情况是: 角色在执行跑 ...
- Mask_RCNN测试自己的模型(练习)
# coding: utf-8 # In[323]: import osimport sysimport randomimport mathimport numpy as npimport skima ...
- cactiez中文版10.1配置监控系统安装笔记
1.安装虚拟机vmware_player2.创建虚拟机,设置桥接模式,内存4g,磁盘大小50G3.启动虚拟机,安装系统4.系统root 默认密码 CactiEZ5.配置网络静态IP,修改IP,网关等信 ...