工厂模式(Factory)

简介: 1、简单工厂2、工厂方法3、抽象工厂简单工厂和工厂方法这俩个设计模式不做详细介绍,请各位看官自行百度,有大量的解释。再次我简单引用一下其他博客主对这三种模式的理解。

1、简单工厂
2、工厂方法
3、抽象工厂

简单工厂和工厂方法这俩个设计模式不做详细介绍,请各位看官自行百度,有大量的解释。再次我简单引用一下其他博客主对这三种模式的理解。

引言

简单工厂、工厂方法、抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽象取了出来,优化了系统的架构,并且增强了系统的扩展性。此篇博客是笔者对学完这三种模式之后一个小小的总结

简单工厂

简单工厂模式的工厂类一般是使用静态方法,通过接收的参数不同来返回不同的对象实例。不修改代码的话,是无法扩展的
优点:客户端可以免除直接创建产品对象的责任,而仅仅是“消费”产品。简单工厂模式通过这种做法实现了对责任的分割
缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了

工厂方法

工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。在同一等级结构中,支持增加任意产品
优点:允许系统在不修改具体工厂角色的情况下引进新产品
缺点:由于每加一个产品,就需要加一个产品工厂的类,增加了额外的开发量

抽象工厂

抽象工厂是应对产品族概念的。应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。比如,每个汽车公司可能要同时生产轿车、货车、客车,那么每一个工厂都要有创建轿车、货车和客车的方法
优点:向客户端提供一个接口,使得客户端在不必指定产品具体类型的情况下,创建多个产品族中的产品对象
缺点:增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性

以上是对三种方法的介绍和优缺点描述,接下来我们使用一个实例来说明抽象工厂的创建

设计说明

案例如下,手机厂商拥有屏幕和主板这俩条生产线,不同的手机厂商生产规格不同的产品(小米公司和苹果公司)
我们进行分析,俩家手机厂商,俩条生产线生产俩种设备

1

定义如下,首先我们定义一个抽象的工厂,这个工厂的方法包含
1、创建屏幕
2、创建主板
这个抽象工厂的作用主要是让继承他的子类 实现这俩个抽象方法

/// <summary>
    /// 抽象工厂类:提供创建不同品牌的手机屏幕和手机主板
    /// </summary>
    public abstract class AbstractFactory
    {
        //工厂生产屏幕
        public abstract Screen CreateScreen();
        //工厂生产主板
        public abstract MotherBoard CreateMotherBoard();
    }

2

定义手机屏幕和手机主板的的抽象方法,因为不同的厂商对产品规格不同,所以定义好抽象的基类,再交由各不同的厂商去实现功能,实现如相

/// <summary>
    /// 屏幕抽象类:提供每一品牌的屏幕的继承
    /// </summary>
    public abstract class Screen
    {
        public abstract void print();
    }

/// <summary>
    /// 主板抽象类:提供每一品牌的主板的继承
    /// </summary>
    public abstract class MotherBoard
    {
        public abstract void print();
    }

不同厂商对屏幕和主板的实现类如下:

      /// <summary>
    /// 苹果手机屏幕
    /// </summary>
    public class AppleScreen:Screen
    {
        public override void print()
        {
            Console.WriteLine("苹果手机屏幕!");
        }
    }
    /// <summary>
    /// 苹果手机主板
    /// </summary>
    public class AppleMotherBoard:MotherBoard
    {
        public override void print()
        {
            Console.WriteLine("苹果手机主板!");
        }
    }

    /// <summary>
    /// 小米手机屏幕
    /// </summary>
    public class XiaoMiScreen:Screen
    {
        public override void print()
        {
            Console.WriteLine("小米手机屏幕!");
        }
    }

    /// <summary>
    /// 小米手机主板类
    /// </summary>
    public class XiaoMiMotherBoard :MotherBoard
    {
        public override void print()
        {
            Console.WriteLine("小米手机主板!");
        }

3

经过上面俩个步骤我们得到了不同商品的实现,现在我们还缺少一个东西,就是不同的商家对自己商品的获取实现
此时我们应该建立不同商家的工厂类,有俩个商家,我们就建立俩个工厂类,工厂中分别实现创建自己产品
实现的工厂要继承AbstractFactory

    /// 小米手机工厂类
    /// </summary>
    public class XiaoMiFactory : AbstractFactory
    {
        /// <summary>
        /// 生产小米手机屏幕
        /// </summary>
        /// <returns></returns>
        public override Screen CreateScreen()
        {
            return new XiaoMiScreen();
        }

        /// <summary>
        /// 生产小米手机主板
        /// </summary>
        /// <returns></returns>
        public override MotherBoard CreateMotherBoard()
        {
            return new XiaoMiMotherBoard();
        }
    }

   /// <summary>
    /// 苹果手机工厂
    /// </summary>
    public class AppleFactory : AbstractFactory
    {
        /// <summary>
        /// 生产苹果手机屏幕
        /// </summary>
        /// <returns></returns>
        public override Screen CreateScreen()
        {
            return new AppleScreen();
        }

        /// <summary>
        /// 生产苹果手机主板
        /// </summary>
        /// <returns></returns>
        public override MotherBoard CreateMotherBoard()
        {
            return new AppleMotherBoard();
        }
    }

4

内容创建完成,接下去我们就来进行结果的输出

       //小米工厂生产小米手机的屏幕和主板
            AbstractFactory xiaomiFactory = new XiaoMiFactory();
            Screen xiaomiScreen = xiaomiFactory.CreateScreen();
            xiaomiScreen.print();
            MotherBoard xiaomiMotherBoard = xiaomiFactory.CreateMotherBoard();
            xiaomiMotherBoard.print();

            //苹果工厂生产苹果手机屏幕和主板
            AbstractFactory appleFactory = new AppleFactory();
            Screen appleScreen = appleFactory.CreateScreen();
            appleScreen.print();
            MotherBoard appleMotherBoard = appleFactory.CreateMotherBoard();
            appleMotherBoard.print(); 

理解:
不同的商家拥有自己的工厂创建自己的产品
1、首先实例化商家工厂
2、创建不同的商品
3、调用商品功能

目录
相关文章
|
7月前
|
设计模式
设计模式之工厂 Factory
设计模式之工厂 Factory
57 1
|
7月前
|
设计模式
设计模式(二)工厂方法模式(Factory Method)
设计模式(二)工厂方法模式(Factory Method)
37 0
|
存储 设计模式 Java
创建型模式 - 工厂模式(Factory Pattern)
创建型模式 - 工厂模式(Factory Pattern)
|
设计模式
《一天一个设计模式》----工厂方法模式(Factory Method)
《一天一个设计模式》----工厂方法模式(Factory Method)
102 0
《一天一个设计模式》----工厂方法模式(Factory Method)
|
设计模式 Java Spring
工厂模式(Factory)
工厂模式是创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,创建对象不会对客户端暴露创建逻辑,隐藏创建对象的详情,从而实现客户端与具体实现的解耦。工厂模式设计时需求注意的点: 工厂类提供公共的方法来创建对象,无论静态,而不是客户端直接创建 方法的参数可选,但参数只用来决定哪种实现,不应该存在业务参数 方法的返回一般是被创建的接口对象,也可以是抽象类或具体类 常见的工厂模式有工厂方法模式、简单工厂模式和抽象工厂模式等,并不要拘泥于哪种,在实际业务中根据需求设计。
219 0
工厂模式(Factory)
|
设计模式 缓存 Java
创建型-Factory
一般情况下,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。不过,在 GoF 的《设计模式》一书中,它将简单工厂模式看作是工厂方法模式的一种特例,所以工厂模式只被分成了工厂方法和抽象工厂两类。实际上,前面一种分类方法更加常见,所以,在今天的讲解中,我们沿用第一种分类方法。
117 0
|
XML 存储 设计模式
JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
文章为转载:代码为自己写的和改编的。 本节主要代码: https://yunpan.cn/cqa24JbQmyxp7 访问密码 b917 转载自小若博客:http://blog.csdn.net/lovesomnus/article/details/46634987
371 0
JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
|
Java 设计模式 C++
设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)
 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。
6357 1
|
设计模式
设计模式二: 工厂方法(Factory Method)
简介 工厂方法模式是创建型模式的一种, 核心结构有四个角色: 抽象工厂,具体工厂,抽象产品,具体产品; 实现层面上,该模式定义一个创建产品的接口,将实际创建工作推迟到具体工厂类实现, 一个产品对应一个工厂, 这样的好处是当有新产品引入时可以不修改具体的工厂角色. 意图 定义了一个创建对象的接口,但由子类决定要实例化哪个类。
887 0