美文网首页
【原创】一个例子比较简单工厂,工厂方法和抽象工厂方法

【原创】一个例子比较简单工厂,工厂方法和抽象工厂方法

作者: nanteschen | 来源:发表于2016-10-30 12:44 被阅读0次

设计模式的关键:封装变化(未来可能的变化)

简单工厂:封装的是创建对象的过程。

简单工厂实现:

例子一:阿迪达斯工厂

 class AdidasFactory {

  public static Sportswear createSportswear(string sportswear) {

   Sportswear wear= null;

   switch (sportswear) {

        case “footballSuit”:

            wear= newSportswear_footballSuit();

            break;

        case “footballShoes”:

            wear= newSportswear_footballShoes();

            break;

        case “stockings”:

            wear= newSportswear_stockings();

            break;  

    }

    returnwear;

    }

}

客户端:

Sportswear wear = AdidasFactory.createSportswear(”footballSuit”);

MyFootballSuit footballSuit = wear.GetSportswear( );

这时如果阿迪达斯工厂要新增一个生产“帽子”的方法类,他就必须修改原有的AdidasFactory工厂类,新增一个“case”不但对扩展开放了,对修改也开放了,违背了开放-封闭原则。

工厂方法:封装的内容是“类的扩展”,方便增加新的产品/功能,使类的实例化延迟到子类

例子二:阿迪达斯工厂

先建一个工厂接口:

interface AdidasFactory {

    Sportswear CreateSportswear();

}

然后球服球鞋球袜各建一个具体工厂实现接口:

class FootballSuitFactory: AdidasFactory{

    public Sportswear CreateSportswear( ) {

    return new FootballSuit( );

    }

}

class FootballShoesFactory: AdidasFactory{

    public Sportswear CreateSportswear( ) {

    return new FootballShoes( );

    }

}

class StockingsFactory: AdidasFactory{

    public Sportswear CreateSportswear( ) {

    return new Stockings( );

}

}

客户端的实现是这样的:

AdidasFactory adidasFootballSuitFactory= new FootballSuitFactory( );

Sportswear wear = adidasFootballSuitFactory.CreateSportswear( );

MyFootballSuit footballSuit=wear.GetSportswear( );

这样,一个简单工厂模式的工厂类,变成了一个工厂抽象接口和多个具体生成对象的工厂,当我们要增加“阿迪达斯帽子”这种功能时,不需要再改变原有的工厂类了,只需要再增加此功能的运动服装类和相应的工厂类就可以

简单工厂方法相比工厂方法违背了开放—封闭原则,不利于改动

抽象工厂:

抽象工厂提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

这里阿迪达斯公司现在生产皇马和拜仁两个不同球队的球衣,它的所有产品:球服,球袜和球鞋有皇马和拜仁两个不同的实现类型

简单工厂:用来生产同一等级结构中的任意产品。(对于增加新的产品,必须修改代码)

工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)

抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,必须修改代码;支持增加产品族,如水果族,蔬菜族)

抽象工厂和工厂方法是针对简单工厂对不同方向的扩展

抽象工厂关键在于产品之间的抽象关系,所以至少要两个产品;

工厂方法在于生成产品,不关注产品间的关系,所以可以只生成一个产品。

相关文章

  • 【原创】一个例子比较简单工厂,工厂方法和抽象工厂方法

    设计模式的关键:封装变化(未来可能的变化) 简单工厂:封装的是创建对象的过程。 简单工厂实现: 例子一:阿迪达斯工...

  • 工厂模式

    简单工厂 —— 工厂方法 —— 抽象工厂 简单工厂: 静态(工厂方法) : 创建一个对象。工厂方法: 动态: 基于...

  • 设计模式-工厂模式

    工厂模式概念 实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂模式...

  • 创建型模式

    1. 简单工厂模式 2. 工厂方法模式 例子:一个工厂只生产一种产品 3. 抽象工厂模式 例子:一个工厂生产可以多...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 工厂方法(Factory Method)

    工厂方法 一般情况下,工厂模式分为:简单工厂、工厂方法和抽象工厂。 简单工厂模式(Simple Factory) ...

  • python设计模式-1工厂设计模式-3抽象工厂

    抽象工厂简介 抽象工厂设计模式是工厂方法的泛化。抽象工厂是(逻辑上的)一组工厂方法, 每个工厂方法负责产生不同种类...

  • 抽象工厂模式

    抽象工厂模式给我的感觉就是,在一个抽象类工厂中定义好多个抽象方方法,每个抽象方法都对应一个子工厂方法,子工厂方法实...

  • 1: 简单工厂模式

    一. 基本概念 定义 实例化对象,用工厂方法代替new操作 工厂模式包括工厂方法模式和抽象工厂模式 抽象工厂模式是...

  • 工厂方法模式及策略模式

    本文主要内容 工厂方法介绍 工厂方法 抽象工厂介绍 抽象工厂 策略模式 本文继续介绍相关设计模式,本期介绍工厂方法...

网友评论

      本文标题:【原创】一个例子比较简单工厂,工厂方法和抽象工厂方法

      本文链接:https://www.haomeiwen.com/subject/xvnvsttx.html