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图: 其他的过多概念不再 ...
随机推荐
- 「小程序JAVA实战」小程序和后台api通信(28)
转自:https://idig8.com/2018/08/19/xiaochengxujavashizhanxiaochengxuhehoutaiapitongxin28/ 开发最重要的就是实操! 小 ...
- ListView 中 的 分页
Django Pagination 简单分页 当博客上发布的文章越来越多时,通常需要进行分页显示,以免所有的文章都堆积在一个页面,影响用户体验.Django 内置的 Pagination 能够帮助我 ...
- poi操作word 2007 常用方法总结
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...
- Git(三):Git 使用规范流程
转:http://www.ruanyifeng.com/blog/2015/08/git-use-process.html 团队开发中,遵循一个合理.清晰的Git使用流程,是非常重要的. 否则,每个人 ...
- VRRP概述
随着Internet的发展,人们对网络的可靠性的要求越来越高.对于局域网用户来说,能够时刻与外部网络保持联系是非常重要的. 通常情况下,内部网络中的所有主机都设置一条相同的缺省路由,指向出口网关(即图 ...
- BAT脚本编写教程
windows批处理 (cmd/bat) 编程详解 开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建.编辑和查看.两者所用的命令行代码 ...
- MySQL Root密码丢失解决方法总结
1. 检查my.cnf,看看有没有密码......靠这也算一条啊 2. 如果能够重启,首先使用–skip-grant-tables参数重启,然后改密码,再去掉–skip-grant-tables参数重 ...
- 关于SharePoint 2016
在刚刚过去的Ignite 2015技术会议上,微软发布了一些有关SharePoint 2016的消息.下面是对相关消息的一个简短总结: 1.首先,本地部署版本的SharePoint 2016还会有,嗯 ...
- 刷题向》一道简单的思路题BZOJ1800(EASY+)
这道题其实并不难,主要原因是数据范围很小,当然数据如果大来也可以优化,但重点是在做的时候用的思路很通用, 所以本题是一道思想题(当然思想也不难) 标题里的“+”体现在一些边界处理中. 直接甩题目 De ...
- APP安全之代码混淆防止反编译查看真实的头文件函数声明
现在有的公司对自己的爱屁屁(APP)安全上有重视,所以本篇讲一下代码混淆,即使别人反编译出来,也看不出来头文件的信息. 上菜: 1.首先安装class-dump,下载地址:http://steveny ...