工厂模式

JavaScript 工厂模式

梦想的初衷 提交于 2019-12-05 05:26:35
function FruitMaker() { this.cococola = function coco(price) { console.log("生成一瓶Coca-Cola,多少钱:" + price); } this.xuebi = function xuebi(price) { console.log("生成一瓶可乐,多少钱:" + price); } } FruitMaker.prototype.make = function (water, price) { try { var func = this[water]; func.prototype = FruitMaker.prototype; return new func(price); } catch (error) { console.log("很抱歉, 公司暂时不能生产" + water + "这种果汁, ...."); } } var maker = new FruitMaker(); var cocoCola = maker.make("cococola", "3.1"); console.log(cocoCola); var xuebi = maker.make("xuebi", "3.2"); console.log(xuebi); var fenda = maker.make("fenda", "3

享元模式

寵の児 提交于 2019-12-05 04:28:33
28.1 内存溢出, 司空见惯下午, 我正在开会中, 老大推门进来。“三儿, 出来一下。 ”我刚出会议室门口, 老大就发话了。“郎当(姓朗, 顺口就叫郎当) 的那个报考系统又crash了一台机器, 两天已经宕了4次了, 你这边还有紧急的事情没有? ……没有, 那赶快过去顶一下, 就运行三天的程序, 两天宕了4次, 还怎么玩? ! ”我马上收拾东西, 冲到马路上拦了出租车, 同时打电话给郎当。“三哥, 厂商人员已经定位出了, OutOfMemory内存溢出, 没查到有内存泄漏的情况, 现在还在跟踪……是突然暴涨的, 都是在繁忙期出现问题的……”内存溢出对Java应用来说实在是太平常了, 有以下两种可能。● 内存泄漏无意识的代码缺陷, 导致内存泄漏, JVM不能获得连续的内存空间。● 对象太多代码写得很烂, 产生的对象太多, 内存被耗尽。 现在的情况是没有内存泄漏, 那只有一种原因——代码太差把内存耗尽。到现场后, 郎当给我介绍了一下系统情况。 该系统是一个报考系统, 其中有一个模块负责社会人员报名, 该模块对全国的考试人员只开放3天, 并且限制报考人员数量。 第一天9点开始报考, 系统慢得像蜗牛, 基本上都不能访问, 后来设置了HTTP Server的并发数量, 稍有缓解, 40分钟后宕了一台机器, 10分钟后, 又挂了一台, 下午3点又挂了一台, 看样子晚上要让郎当去寺庙烧烧香了

工厂模式例子

隐身守侯 提交于 2019-12-05 04:01:34
interface Fruit{ public void eat(); } class Apple implements Fruit{ @Override public void eat() { System.out.println("吃苹果"); } } class Cherry implements Fruit{ @Override public void eat() { System.out.println("吃樱桃"); } } class Factory{ //工厂 public static Fruit getInstance(String className){ if ("apple".equals(className)){ return new Apple(); }else if ("cherry".equals(className)){ return new Cherry(); }else{ return null; } } } public class FactoryDemo { public static void main(String[] args){ Fruit f = Factory.getInstance(args[0]); f.eat(); } } 来源: https://www.cnblogs.com/LoveGdx/p/11904397

对几种设计模式的归纳理解

时光总嘲笑我的痴心妄想 提交于 2019-12-05 03:14:55
工厂模式 只对结果赋值,封装创建过程,保证独一无二 单例模式 保证过程中只有一个实例 原型模式 多个实例,一个原型派生多份数据 代理模式 找人办事,增强职责 委派模式 老板分配任务给管理人员 策略模式 管理人员根据不同情况分配任务给员工具体实现 模板模式 流程标准化,具体实现剥离主干 适配器模式 兼容转接头、支持不同支付方式 装饰器模式 奶茶加料 观察者模式 任务完成时触发通知事件 来源: https://www.cnblogs.com/erfsfj-dbc/p/11901952.html

使用工厂模式,处理代码解耦

梦想与她 提交于 2019-12-04 20:51:32
//一般需要两个条件: 1、设置配置文件bean.properties // 2、使用反射机制,获取代理对象的实现类 //配置文件bean.properties(注意不要加“;”号) accountDao=com.hope.dao.impl.AccountDaoImplaccountService=com.hope.service.impl.AccountServiceImpl package com.hope.factory;import java.io.IOException;import java.io.InputStream;import java.util.Properties;/** * @author newcityman * @date 2019/11/18 - 14:44 * 第一个:需要一个配置文件来配置我们的service和dao * 第二个:通过读取配置文件中配置的内容,反射创建对象 */public class BeanFactory { //定义一个properties对象 public static Properties props; static { try { //定义一个properties对象 props = new Properties(); //获取properties文件的流对象 InputStream in = BeanFactory

DDD(九)--工厂

我的梦境 提交于 2019-12-04 14:41:02
1、引言 在针对复杂领域进行建模时,聚合、实体和值对象之间的依赖关系可能会变得十分复杂。在某个对象中为了确保其依赖对象的有效实例被创建,需要深入了解对象实例化逻辑,我们可能需要加载其他相关对象,且可能为了保持其他对象的领域不变性增加了额外的业务逻辑,这样即打破了领域的单一责任原则,又增加了领域的复杂性。 那如何去创建复杂的领域对象呢?因为复杂的领域对象的生命周期可能需要协调才能进行创建。 这个时候,我们就可以引入创建类模式——工厂模式来帮忙,将对象的使用与创建分开,将对象的创建逻辑明确地封装到工厂对象中去。 2、工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 DDD中工厂的主要目标是隐藏对象的复杂创建逻辑;次要目标就是要清楚的表达对象实例化的意图。 而工厂模式是计模式中的创建类模式之一。借助工厂模式我们可以很好实现DDD中领域对象的创建。 而针对工厂模式的实现主要有四种方式: 简单工厂:简单实用,但违反开放封闭; 工厂方法:开放封闭,单一产品; 抽象工厂:开放封闭,多个产品; 反射工厂:可以最大限度的解耦。 这里就不多赘述了。 3、封装内部结构 当需要为聚合添加元素时

工厂模式

南楼画角 提交于 2019-12-04 10:35:58
简单工厂模式过于冗余,一般来说会把需要实现的都在一个方法内完成,不利于维护。改进以后,出现工厂方法模式,这个模式好在每个产品都有自己的工厂,不用像简单工厂一样把所有的东西塞进一个方法完成,每个工厂各自完成产品,然后调用的时候直接调用工厂进行生产就可以,至于工厂里面具体的实现细节,交给程序员完成。不过还是有一个不好的地方,就是用户要记住每一个工厂,这样对用户来说并不友好。所以最后出现了抽象工厂模式,这个模式把简单工厂模式与工厂方法模式进行了合二为一,借用了简单工厂的生产方法,生产什么产品,调用什么工厂,这对于用户来说不可见,但是利用了不同的工厂进行实现。 来源: https://www.cnblogs.com/xp1234/p/11855279.html

工厂方法模式

筅森魡賤 提交于 2019-12-04 10:22:00
披萨项目需求 披萨项目新的需求:客户在点披萨时,可以点不同口味的披萨,比如北京的奶酪pizza、北京的胡椒pizza或者是伦敦的奶酪pizza、伦敦的胡椒pizza。 按照简单工厂模式,可以创建不同的简单工厂类,比如BJPizzaSimpleFactory、LDPizzaSimpleFactory等等.从当前这个案例来说,也是可以的,但是考虑到项目的规模,以及软件的可维护性、可扩展性并不是特别好。 下面我们来看一下,如何使用工厂方法模式实现需求。 工厂方法模式 工厂方法模式介绍: 工厂方法模式设计方案:将披萨项目的实例化功能抽象成抽象方法,在不同的口味点餐子类中具体实现。 工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。 工厂方法模式将对象的实例化推迟到子类。 1、Pizza类 //将Pizza 类做成抽象 public abstract class Pizza { protected String name; //名字 //准备原材料, 不同的披萨不一样,因此,我们做成抽象方法 public abstract void prepare(); public void bake() { System.out.println(name + " baking;"); } public void cut() { System.out.println(name + "

HeadFirst设计模式

笑着哭i 提交于 2019-12-04 07:13:49
HeadFirst设计模式 1策略模式 鸭子飞行和嘎嘎叫策略 2工厂模式 简单工厂简单的pizza工厂 通过一个工厂类的方法,创建和返回对象实例 原来混乱的代码: 修改后 简单工厂类图 Pizza店变成加盟店 在创建Pizza时将工厂传进去 想要多一些的质量控制,每个pizza店的工艺又不一样,有的先切再烤,有的先烤再切。 现在来看看Pizza店的多态。 将变化的东西移到低层(实现,子类),抽象的共性移到高层(超类或接口) 这边把Pizza的工艺流程移到子类中去 PizzaStore超类变成,将CreatePizza变成抽象方法,由子类实现方法。 工厂模式的工厂方法 Pizza本身,超类 Pizza的多态 最终的User调用 对于pizza店和pizza通过工厂模式形成了一个pizza组件,这边对pizza的实现,就不会违反针对接口编程 简单工厂模式 创建者和产品 所有的底层都依赖于高层,高层与高层之间相互依赖,相互解耦。 工厂UML Pizza店再次升级,Pizza原料升级 Ingredient(成分)超类: Dough(面团)Veggies(蔬菜)Pepperoni(意大利香肠)clam(蛤)子类: 改造Pizza类 抽象方法prepare() cheesepizza 靠近一点工厂 商店如何使用工厂 抽象工厂模式类图 抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族

初探PHP设计模式

一个人想着一个人 提交于 2019-12-04 04:46:12
设计模式不是一套具体的语言框架,是行之有效的编码规范,是 一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。合理使用设计模式将有助于初学者更加深入地理解面向对象思维。 一、三大基本模式 1、工厂模式   工厂模式分为简单工厂模式,工厂模式,抽象工厂模式,今天主要讲简单工厂模式。通过定义好的工厂方法或者类生成对象,而不是在代码中直接new 一个类来生成对象。使用工厂模式,可以避免当改变某个类的名字或者方法之后,在调用这个类的所有的代码中都修改它的名字或者参数。 声明一个初始类 class DataBase { public function __construct() { echo __CLASS__; } } 创建一个工厂类,写一个工厂方法 class Factory { static function creatDataBase() { $db = new DataBase(); return $db; } } 再在需要调用初始类的php代码处使用工厂类 spl_autoload_register('autoload1'); $db = SPL\Factory::creatDataBase(); function autoload1($class) { $dir = __DIR__;