- 浏览: 768746 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
简单工厂并不是一个“真正的“模式,可以把它当作一种编程习惯。它的最大优点在于工厂类中包含必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖
工厂方法模式:定义了一个创建对象的接口,但由于类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
要点:
1.所有的工厂都是用来封闭对象的创建
2.简单工厂,虽然不是真正的设计模式,但仍不失为一个简单的方法,可以将客户程序从具体类解耦
3.工厂方法使用继承,把对象的创建委托给子类,子类实现工厂方法来创建对象
4.所有工厂模式都通过减少应用程序和具体类之间的依赖促进松耦合
5.工厂方法允许类将实例化延迟到子类进行
6.依赖倒置原则,指导我们避免依赖具体类型,而要尽量依赖抽象
设计原则:依赖倒置:依赖抽象,不要依赖具体类
1.变量不可以持有具体类的引用
2.不要让类派生自具体类
3.不要覆盖基类中已实现的方法
Pizza.h
PizzaStore.h
SimplePizzaFactory.h
main.cpp
工厂方法模式:定义了一个创建对象的接口,但由于类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
要点:
1.所有的工厂都是用来封闭对象的创建
2.简单工厂,虽然不是真正的设计模式,但仍不失为一个简单的方法,可以将客户程序从具体类解耦
3.工厂方法使用继承,把对象的创建委托给子类,子类实现工厂方法来创建对象
4.所有工厂模式都通过减少应用程序和具体类之间的依赖促进松耦合
5.工厂方法允许类将实例化延迟到子类进行
6.依赖倒置原则,指导我们避免依赖具体类型,而要尽量依赖抽象
设计原则:依赖倒置:依赖抽象,不要依赖具体类
1.变量不可以持有具体类的引用
2.不要让类派生自具体类
3.不要覆盖基类中已实现的方法
Pizza.h
#ifndef PIZZA_H #define PIZZA_H #include<iostream> using namespace std; enum PizzaType{ CHEESEPIZZA, VEGGIEPIZZA, CLAMPIZZA, PEPPERONIPIZZA }; class Pizza{ public: virtual void prepare(){ cout << "prepare..." << endl; } void bake(){ cout << "bake..." << endl; } void cut(){ cout << "cut..." << endl; } void box(){ cout << "box..." << endl; } }; class CheesePizza:public Pizza{}; class NYStyleCheesePizza:public Pizza{}; class VeggiePizza:public Pizza{}; class NYStyleVeggiePizza:public Pizza{}; class ClamPizza:public Pizza{}; class NYStyleClamPizza:public Pizza{}; class PepperonPizza:public Pizza{}; class NYStylePepperonPizza:public Pizza{}; #endif // PIZZA_H
PizzaStore.h
#ifndef PIZZASTORE_H #define PIZZASTORE_H #include"Pizza.h" #include"SimplePizzaFactory.h" class PizzaStore{ public: explicit PizzaStore(SimplePizzaFactory* spf=NULL){ mFactory = spf; } //工厂方法 virtual Pizza* createPizza(PizzaType pt)=0; //由于pizza是抽象的,orderPizza并不知道哪些实例加进来,也就是解耦 Pizza* orderPizza(PizzaType pt){ Pizza* pizza; //pizza = mFactory->cratePizza(pt); pizza = createPizza(pt); pizza->prepare(); pizza->bake(); pizza->cut(); pizza->box(); return pizza; } private: SimplePizzaFactory* mFactory; }; class NYPizzaStore:public PizzaStore{ public: Pizza* createPizza(PizzaType pt){ switch(pt){ case CHEESEPIZZA: return new NYStyleCheesePizza; break; case VEGGIEPIZZA: return new NYStyleVeggiePizza; break; case PEPPERONIPIZZA: return new NYStylePepperonPizza; break; case CLAMPIZZA: return new NYStyleClamPizza; break; default: return NULL; break; } } }; #endif // PIZZASTORE_H
SimplePizzaFactory.h
#ifndef SIMPLEPIZZAFACTORY_H #define SIMPLEPIZZAFACTORY_H #include"Pizza.h" #include<stdlib.h> //简单工厂 class SimplePizzaFactory{ public: Pizza* cratePizza(PizzaType pt){ switch(pt){ case CHEESEPIZZA: return new CheesePizza; break; case VEGGIEPIZZA: return new VeggiePizza; break; case PEPPERONIPIZZA: return new PepperonPizza; break; case CLAMPIZZA: return new ClamPizza; break; default: return NULL; break; } } }; class NYPizzaFactory:public SimplePizzaFactory{ public: Pizza* createPizza(PizzaType pt){ switch(pt){ case CHEESEPIZZA: return new NYStyleCheesePizza; break; case VEGGIEPIZZA: return new NYStyleVeggiePizza; break; case PEPPERONIPIZZA: return new NYStylePepperonPizza; break; case CLAMPIZZA: return new NYStyleClamPizza; break; default: return NULL; break; } } }; #endif // SIMPLEPIZZAFACTORY_H
main.cpp
#include"PizzaStore.h" int main(){ PizzaStore *store = new NYPizzaStore(); store->orderPizza(CHEESEPIZZA); } prepare... bake... cut... box...
发表评论
-
桥接模式(Bridge)
2014-09-26 15:34 819桥接模式:将抽象与实现解耦,使得两者可以独立地变化,抽象部分的 ... -
访问者模式(Visitor)
2014-08-03 13:59 837访问者模式(Visitor),表示一个作用于某对象结构中的各元 ... -
解释器模式(interpreter)
2014-08-03 13:55 679解释器模式(interpreter),给定一个语言,定义它的方 ... -
享元模式(Flyweight)
2014-08-02 09:31 636享元模式(Flyweight):运用共享技术有效地支持大量细粒 ... -
中介者模式(Mediator)
2014-08-02 09:26 444中介者模式(Mediator):用一个中介对象来封装一系列的对 ... -
职责链模式(Responsibility)
2014-07-31 20:36 586职责链模式(Chain of Responsibility): ... -
合成/聚合利用原则
2014-07-29 20:56 589合成/聚合利用原则:尽量使用合成/聚合,尽量不要使用类继承 ... -
组合模式(Composite)
2014-07-27 10:15 432组合模式(Composite):将对象组合成树形结构以表示'部 ... -
备忘录模式(Memento)
2014-07-26 09:09 561备忘录(Memento):在不破坏封装性的前提下,捕获一个对象 ... -
事件委托(delegate)
2014-07-23 20:53 596委托机制的本质就是调用成员函数的函数指针,实现回调 委托就是 ... -
建造者模式(Builder)
2014-07-23 20:45 566建造者模式(Builder):将一个复杂对象的构建与它的表示分 ... -
外观模式(facade)
2014-07-20 09:31 632外观模式(facade):为子系统中的一组接口提供一个一致的界 ... -
迪米特法则
2014-07-19 18:23 407迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发 ... -
原型模式
2014-07-16 20:34 512原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创 ... -
里氏代换
2014-07-12 09:43 339里氏代换:一个软件实体如果使用的是一个父类的话,那么一定适用于 ... -
依赖倒转
2014-07-12 09:39 396依赖倒转:抽象不应该依赖细节,细节应该依赖抽象,说白了就是针对 ... -
开放-封闭原则
2014-07-12 09:33 563开放-封闭原则:是说软件实体(类,模块,函数等等)应该可以扩展 ... -
单一职责
2014-07-12 09:26 561单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的 ... -
MVC
2011-07-21 17:32 1015MVC是一种复合模式,结合了观察者,策略模式和组合模式。 要 ... -
代理模式(Proxy)
2011-07-19 15:47 930代理模式:为另一个对象提供一个替身或占位符以控制这个对象的访问 ...
相关推荐
而"Factory"可能是一个代码示例,展示了工厂模式的具体实现,包括以上提到的三种模式。 通过学习和理解这三种工厂模式,开发者可以更好地组织代码,降低模块间的耦合,提高软件的可维护性和可扩展性。在实际开发...
在Java中,工厂模式有三种主要形式:简单工厂模式、工厂方法模式和抽象工厂模式。 1. 简单工厂模式:也称为静态工厂模式,它通过一个静态方法来创建对象。在这个模式中,工厂类负责决定实例化哪个产品类。这种模式...
总的来说,简单工厂模式提供了一种便捷的创建对象的方式,减少了客户端与具体实现之间的耦合。虽然在某些情况下可能导致代码的可扩展性和可维护性降低,但在许多简单的应用场景中,它仍然是一个实用的设计模式。理解...
在软件设计模式中,工厂模式是一种非常...在实际项目中,工厂模式经常与其他设计模式(如策略模式、建造者模式等)结合使用,以解决更复杂的问题。阅读并理解这些代码有助于深入理解工厂模式及其在Java编程中的应用。
6. 简单工厂模式 部分源码实例: // 奔驰工厂 class BenzFactory : public AFactory { public: ICar* CreateCar() { return new BenzCar(); } }; // 宝马工厂 class BmwFactory : public AFactory { public: ...
简单工厂模式(Simple Factory Pattern)是一种静态工厂方法,它通过一个公共的工厂类来创建对象。这个工厂类通常包含一个或多个静态方法,用于根据输入参数创建不同类型的实例。这种模式的优点在于客户端代码无需...
通常,这样的示例可能包括一个`AbstractFactory`(工厂接口)、一个或多个`ConcreteFactory`(具体工厂类)以及与之对应的`ConcreteProduct`(具体产品类)。 例如,假设我们有一个电子产品制造厂,有生产手机和...
本文将深入探讨"反射"以及两种常见的工厂模式:"简单工厂模式"和"工厂方法模式",并结合提供的文件名称来解析这些概念。 首先,我们来看"反射"。在Java等面向对象语言中,反射是一种强大的工具,它允许程序在运行时...
UML文档-简单工厂模式 简单工厂模式是一种专门负责将大量有共同接口的类实例化的模式,而不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一个类。 简单工厂模式的...
首先,我们来看一下“简单工厂模式”(Simple Factory Pattern)。这种模式的核心思想是提供一个工厂类,负责根据输入条件创建具体的产品对象。在这个例子中,"pre1"可能是原始的、未使用设计模式的代码,可能直接...
### C#中的简单工厂模式与工厂方法模式 #### 一、引言 在软件工程领域,设计模式是一种被广泛接受的解决特定问题的最佳实践。在众多设计模式中,工厂模式因其能够灵活创建对象而备受推崇。本文将详细介绍两种常见...
### 简单工厂模式、工厂模式、抽象工厂模式 #### 一、引子 假设有一位暴发户,家里有两辆豪车——Benz和BMW,并雇用了司机为他服务。按照原始的设计思路,每当暴发户需要用车时,都需要明确告诉司机要开哪辆车。...
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂...
**抽象工厂模式(Abstract Factory)** 抽象工厂模式是工厂方法模式的进一步扩展,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。这在处理不同平台或环境下的产品族时非常有用。在Java...
简单工厂模式是软件设计模式中的一种基础模式,它属于创建型模式,主要解决对象的创建问题,降低了系统与具体创建对象之间的耦合度。在这个设计模式课程资料中,我们将使用Java语言来阐述和实现简单工厂模式,并在...
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时...在实际项目中,工厂模式经常与其他设计模式结合使用,如策略模式、单例模式等,以解决更复杂的问题。
简单工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。这种模式使得代码能够将实例化的责任封装起来,使得客户端代码无需关心具体的对象实现,只需要知道一个公共接口即可...
6. **与其他设计模式的比较**:可能会对比抽象工厂模式与单例模式、工厂方法模式等其他创建型模式,解释它们之间的区别和适用场合。 总之,"走进设计模式之抽象工厂"这篇博客深入探讨了抽象工厂模式的原理、实现...
在Java中,简单工厂模式适用于对象的创建过程较为固定或不复杂的情况。它定义一个公共的工厂类,根据传入的参数或者条件来决定返回哪个具体类的实例。这种方式降低了代码的耦合度,使得在不修改客户端代码的情况下,...