话说有三大潮牌公司一直相互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#设计模式--工厂模式和抽象工厂模式的更多相关文章

  1. 设计模式之工厂模式VS抽象工厂

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  2. Java设计模式(三) 抽象工厂模式

    原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...

  3. Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...

  4. 设计模式的征途—3.抽象工厂(Abstract Factory)模式

    上一篇的工厂方法模式引入了工厂等级结构,解决了在原来简单工厂模式中工厂类职责太重的原则,但是由于工厂方法模式的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,从而增加系统开销.那么,我们应该 ...

  5. 设计模式(3)抽象工厂模式(Abstract Factory)

    设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 源码地址 0 抽象工厂模式简介 0.0 抽象工厂模式定义 抽象工厂 ...

  6. 设计模式的征途—4.抽象工厂(Abstract Factory)模式

    上一篇的工厂方法模式引入了工厂等级结构,解决了在原来简单工厂模式中工厂类职责太重的原则,但是由于工厂方法模式的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,从而增加系统开销.那么,我们应该 ...

  7. Java设计模式之【工厂模式】(简单工厂模式,工厂方法模式,抽象工厂模式)

    Java设计模式之[工厂模式](简单工厂模式,工厂方法模式,抽象工厂模式) 工厂模式出现的原因 在java中,创建一个对象最简单的方法就是使用new关键字.但在一些复杂的业务逻辑中,创建一个对象不只需 ...

  8. 设计模式(Python)-简单工厂,工厂方法和抽象工厂模式

    本系列文章是希望将软件项目中最常见的设计模式用通俗易懂的语言来讲解清楚,并通过Python来实现,每个设计模式都是围绕如下三个问题: 为什么?即为什么要使用这个设计模式,在使用这个模式之前存在什么样的 ...

  9. 设计模式3---工厂模式(Factory Pattern简单工厂、工厂方法、抽象工厂)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...

  10. Java设计模式(3)——创建型模式之抽象工厂模式(Abstract Factory)

    一.概述 抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象. UML图: 其他的过多概念不再 ...

随机推荐

  1. C++与C#有关对库(动态库dll,静态库.lib)文件的调用

    1 动态库的相互调用 1.1 C#调用C++ dll步骤(只能导出方法): 1. c++建立空项目->源文件文件夹中添加cpp文件和函数 2. c++属性设置中,配置类型设置为动态库dll,公共 ...

  2. centOS安装openoffice的方法

    centOS安装openoffice的方法 分类: centOS 2012-06-15 10:24 2872人阅读 评论(0) 收藏 举报 centos测试 yum install openoffic ...

  3. SQL中Like语句的语法

    在SQL结构化查询语言中,LIKE语句有着至关重要的作用. LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用 ...

  4. F5负载均衡架构图

    原文:https://blog.csdn.net/qq_35611533/article/details/51917279?locationNum=1&fps=1

  5. 从邮件原理来看 postfix和docecot

    好早好早以前计算机网络老师就教了说,邮件嘛,就三个协议smtp,imap,pop3. smtp 用来发邮件,imap,pop3用来收邮件.噢?是么.难道没有发现这句话有非常多的漏洞,根本就不能说清楚这 ...

  6. 【原】Coursera—Andrew Ng机器学习—Week 5 习题—Neural Networks learning

    课上习题 [1]代价函数 [2]代价函数计算 [3] [4]矩阵的向量化 [5]梯度校验 Answer:(1.013 -0.993) / 0.02 = 3.001 [6]梯度校验 Answer:学习的 ...

  7. linux下jdk/maven/tomcat

    debian安装的openjdk只包括jre,没有tools.jar,dt.jar,所以要安装openjdk完全版. sudo apt--jdk 若操作系统中安装多个版本的java,可以采用如下命令来 ...

  8. Android中的网络编程

    谷歌在Android6.0之后就废弃了使用HttpClinet进行网络连接.所以,这里需要重点学习的是通过HttpUrlConnect进行网络连接. String path="这里是你想要的 ...

  9. 【HDU4734】F(x) 【数位dp】

    题意 先定义了一个函数F(X)=An*2^n-1+An-1*2^n-2+.....+A1*1.其中Ai为X的第i位的值.对于每组数据给出了两个整数A,B.问不超过B的数中有多少的F值是不超过F(A)的 ...

  10. Codeforces 1154F (DP)

    题意:有一个人去买铲子,他需要买正好k把.每把铲子有个标价,并且每把铲子最多只能被买一次.有m种优惠方案,每个优惠方案xi, yi是指如果这次恰好购买了xi把铲子,那么这次购买的铲子中最便宜的yi把将 ...