gof 抽象工厂、工厂方法、原型和Builder

一、定义

抽象工厂:有一个抽象的类。类中有多个接口来创建不同的对象。

工厂方法:有一个类。类中有一个接口来创建对象。

原型:类中有一个Clone接口来深度或者“半深浅”克隆自身的对象。

Builder:类中有多个接口来操作各种复杂的步骤。还有一个接口用来或者通过各个步骤操作的组合而创建的对象。

二、部分应用情况

在刚开始的时候,一般使用工厂方法进行创建。在后期对需求进行扩展的时候视情况而定是需要使用何种扩展方法。

抽象工厂:

• 一个系统要独立于它的产品的创建、组合和表示时。
• 一个系统要由多个产品系列中的一个来配置时。
• 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
• 当你提供一个产品类库,而只想显示它们的接口而不是实现时。

工厂方法:

• 当一个类不知道它所必须创建的对象的类的时候。
• 当一个类希望由它的子类来指定它所创建的对象的时候。
• 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

三、部分实现情况

工厂方法:

// 方式1
class Creator {
public:
    Product* Create(int id) {
        if (id == 1)
            return new ProductImpl1();
        return nullptr;
    }
};

class CreatorImpl1 : public Creator{
public:
    Product* Create(int id) {
        if (id == 2)
            return new ProductImpl2();

        return __super::Create(id);
    }
};

// 方式2
class Creator {
public:
    Product* Create() = 0;
};

template<typename ProductType >
class CreateImpl : public Creator {
public:
    Product* Create() {
        return new ProductType;
    }
};

Builder:

class Product;
class Builder {
public:
    virtual void Opt1() { std::cout << "def Builder::Opt1\n"; }
    virtual void Opt2() { std::cout << "def Builder::Opt2\n"; }

    virtual Product* Create() = 0;
};

class BuilderImpl1 : public Builder {
public:
    virtual void Opt1() { std::cout << "BuilderImpl1::Opt1\n"; }

    virtual Product* Create() {
        Opt1();
        Opt3();
        Opt2();
    }

private:
    void Opt3() { std::cout << "BuilderImpl1::Opt3\n" };
};

四、总结

//待续

时间: 2024-10-13 17:49:06

gof 抽象工厂、工厂方法、原型和Builder的相关文章

简单工厂,工厂方法,抽象方法

首先:简单工厂,工厂方法,抽象工厂三者 都属于创建型模式.主要功能是帮助我们把对象的实例部分抽象出来.优化了系统的架构,并且增强了系统了扩展性. 1:简单工厂 简单工厂模式的工厂类一般是使用静态方法,实质是由一个工厂类根据传入的参数,动态的决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 工厂角色:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需的产品对象. 抽象产品角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例共有的公共接

详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)

园子里关于23种设计模式的博文已经可以说是成千上万.车载斗量.屯街塞巷.不计其数.数不胜数.摩肩接踵.汗牛充栋.车水马龙.门庭若市.琳琅满目直至让人眼花缭乱了.在这样的大环境下之所以来写设计模式类的博文,并不是像一些"非主流"的爱情观那样"宁缺毋滥". 只是其一呢,因为相当于给自己做一个总结,加深一下自己这方面的认识,因为掌握了和把它写出来我感觉后者还可以对技能有一个提升,其二呢是因为最近公司有一个内部的training需要讲设计模式. v写在前面 在这里呢,需要向

设计模式之简单工厂/工厂方法/抽象工厂

这三个设计模式都属于创建型模式,之间具有关联性,就放在一起讲解.其实简单工厂模式是工厂方法的一个特例,并不是23种设计模式的一种. 使用java来写的这几个设计模式.java文件目录树如下所示: [email protected]:~/code/designpattern/SimpleFactory/src$ tree . ├── Client.java └── zy ├── abstractfactory │   ├── AccerFactory.java │   ├── AppleFacto

设计模式 简单工厂+工厂方法+抽象工厂

简单工厂 简单工厂的优缺点: 缺点:①违反了OCP(开放-封闭原则).(当工厂内增加一个方法创建对象时候,需要在原来的工厂内,添加一个case语句).修改原来的类,是违反设计原则的. ②增加客户端和工厂类的耦合. 优点:①去除(非降低)客户端和具体产品的耦合.客户端和具体产品中间增加一个工厂类,增加客户端和工厂类的耦合. ②封装工厂类,实现代码多平台的复用性.创建对象的过程被封装成工厂类,可以多平台(控制台+WEB+Winform...手机端)调用这个工厂. ③封装工厂类,创建对象的过程(具体逻

设计模式之 简单工厂,工厂方法,抽象工厂

学习来源: C#设计模式,刘伟 创建型模式描述如何将对象的创建和使用分离,让用户在使用对象时无须关心对象的创建细节,从而降低系统的耦合度,让设计方案更易于修改和扩展. 引言: 简单工厂(静态工厂) 1, 模式适用环境 工厂类负责创建的对象比较少,由于创建的对象较少 ,不会造成工厂方法中的业务逻辑太过复杂 客户端只知道传入工厂类的参数,对于如何创建对象 并不关心 2, 简单工厂(静态工厂)方法的缺点: 工厂类集中了所有产品的创建逻辑,职责过重,一旦 不能正常工作,整个系统都要受到影响 增加系统中类

GoF——抽象工厂模式

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

AOC 电视机T3212M 进入 工厂模式方法,修改开机启动方式

原启动方式: 通电,再按遥控 器上  "开机" 希望改成:  通电直接打开电视 方法: 1. 按遥控器上的 menu  1147  进入 工厂模式 2.  选择   7  General Settings 3.  选择    0   PowerOn Mode 完成 原文地址:https://www.cnblogs.com/sjdn/p/9176074.html

js工厂创建对象方法

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> </head> <body> 通过工厂的方式创建person对象 在createperson中创建一个对象 然后为这个对象设置相应的属性和方法 之后返回这个对象 <script> function createdog(name,age,color

设计模式-简单工厂 --工厂模式--抽象模式

1 .简单工厂模式 package com.bjsxt.factory.simplefactory; public interface Car { void run(); } package com.bjsxt.factory.simplefactory; public class Audi implements Car { @Override public void run() { System.out.println("奥迪再跑!"); } } package com.bjsxt.