工厂类

React: React组件创建的四种方式

别说谁变了你拦得住时间么 提交于 2019-12-06 12:15:34
一、简介 在前面介绍的React组件知识中,对于组件的创建我只是用了其中某一种方式。其实,在2013年React诞生之初,对于React组件的创建,仅仅只有一种方式,也即createClass函数,在目前项目中使用率还是很高的。但随着后来技术更新,React组件创建的方式也在不断的变化和过时。到目前为止,大概有四种方式。分别是createClass、ES6的类组件、无状态函数式组件、工厂类组件。 二、详解 方式一:React.CreateClass 1、复用性差: <div id="container"></div> <script type="text/babel"> //创建菜单组件 const menuList = React.createClass({ render() { return React.createElement("ol", {"className": "menus"}, React.createElement("li", null, "beef"), React.createElement("li", null, "pork"), React.createElement("li", null, "Lamb"), React.createElement("li", null, "fish"), React.createElement("li", null,

4.工厂模式

匆匆过客 提交于 2019-12-06 09:59:30
1.工厂模式可以把对象的创建和使用分离出来,降低代码的耦合性。 (1)简单工厂模式 简单工厂可以实现对象的创建和对象的使用分离,由专门的工厂类负责对象的创建,缺点在于工厂类不够灵活,如果需要增加新的产品需要修改工厂类,而且产品较多时,工厂方法代码逻辑将会非常复杂。 package com.java.dp.factory; /** * @Author lizhilong * @create 2019/12/2 17:27 * @desc 生产线接口 */ public interface BuildLine { void build(); } package com.java.dp.factory; /** * @Author lizhilong * @create 2019/12/2 17:30 * @desc 食品生产线 */ public class FoodLine implements BuildLine { @Override public void build() { System.out.println("-----------生产食品--------------"); } } package com.java.dp.factory; /** * @Author lizhilong * @create 2019/12/2 17:28 * @desc 服装生产线 */

java|设计模式详解(最全)

眉间皱痕 提交于 2019-12-05 17:13:03
一、设计模式的分类 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 (2)结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 (3)行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下: 二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说 对扩展开放,对修改关闭 。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为

设计模式--简单工厂

家住魔仙堡 提交于 2019-12-05 12:11:23
目标创建对象; 实现 1;实现工厂类 2;调用测试 <?php//调用工厂类require_once "./jiandangongcheng.php"; $po = array(); $po[] = pro::GetInstance(12,1); $po[] = pro::GetInstance(1,11); $po[] = pro::GetInstance(1,1); foreach ($po as $key => $value) { if ($value) { echo "<br/>"; $value->x_caozuo(); echo "<br/>"; $value->Y_caozuo(); }else { echo "非法"; } echo "<br/>"; }    1 <?php 2 //实现工厂类 3 interface product{ 4 function X_caozuo(); 5 function Y_caozuo(); 6 } 7 8 class Xproduct implements product{ 9 10 function X_caozuo(){ 11 echo "我实现了X操作"; 12 } 13 function Y_caozuo() { 14 echo "我没有实现Y_操作 "; 15 } 16 17 } 18 19 class

享元模式

半世苍凉 提交于 2019-12-05 11:07:09
展示网站项目需求 小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同: 1、有客户要求以新闻的形式发布; 2、有客户人要求以博客的形式发布; 3、有客户希望以微信公众号的形式发布。 传统方案 1、直接复制粘贴一份,然后根据客户不同要求,进行定制修改; 2、给每个网站租用一个空间。 方案设计示意图: 传统方案解决网站展示项目的问题分析: 1、需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来处理,相当于一个相同网站的实例对象很多 , 造成服务器的资源浪费 ; 2、解决思路:整合到一个网站中,共享其相关的代码和数据,对于硬盘、内存、CPU、数据库空间等服务器资源都可以达成共享,减少服务器资源; 3、对于代码来说,由于是一份实例,维护和扩展都更加容易,可以使用享元模式来解决。 享元模式 基本介绍 1、享元模式(Flyweight Pattern)也叫蝇量模式:运用共享技术有效地支持大量细粒度的对象; 2、常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则创建一个; 3、享元模式能够解决 重复对象的内存浪费的问题 ,当系统中有大量相似对象,需要缓冲池时。不需总是创建新对象,可以从缓冲池里拿

设计模式

谁都会走 提交于 2019-12-04 21:00:22
1、说下你知道的设计模式有哪些? 下面 3 种类型中各挑几个常见的或者你用过的说就可以了。 2、工厂方法模式和抽象工厂模式有什么区别? 工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类可以创建多个具体产品类的实例。 区别: 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。 3、JDK 中用到了哪些设计模式? 几乎每一种设计模式都被用到了 JDK 的源码中,下面列举一些常见的: 抽象工厂模式 javax.xml.parsers.DocumentBuilderFactory#newInstance() 2. javax.xml.transform.TransformerFactory#newInstance() 建造者模式 java.lang.StringBuilder#append() 2. java.lang.StringBuffer#append() 原型模式 1. java.lang.Object#clone() 适配器模式 java.util.Arrays

《设计模式之禅》之抽象工厂模式

99封情书 提交于 2019-12-04 04:18:12
一、抽象工厂模式的定义 为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。 二、抽象工厂模式的应用 1.抽象工厂模式的优点 封装性 ,每个产品的实现类不是高层模块要关心的,它要关心的是什么?是接口,是抽象,它不关心对象是如何创建出来的,这由谁负责呢?工厂类,只要知道工厂类是谁,我就能创建出一个需要的对象,省时省力,优秀设计就应该如此; 产品族内的约束为非公开状态 。例如生产男女比例的问题上,猜想女娲娘娘肯定有自己的打算,不能让女盛男衰,否则女性的优点不就体现不出来了吗?那在抽象工厂模式,就应该有这样的约束:每生产1个女性,就同时生产出1.2个男性,这样的生产过程对调用工厂类的高层模块来说是透明的,它不需要知道这个约束,我就是要一个黄色女性产品就可以,具体的产品族内的约束是在工厂内实现的; 2.抽象工厂模式的缺点 抽象工厂模式的最大缺点就产品族 扩展非常困难 ,为什么这么说呢?我们以通用代码为例,如果要增加一个产品C,也就是说产品家族由原来的2个增加到3个,抽象类AbstractCreator要增加一个方法createProductC(),然后两个实现类毒药修改,想想看,这严重违背了开闭原则,而且我们一直说明抽象类和接口是一个契约。改变契约,所有与契约有关系的代码都要修改,那么这段代码叫有毒代码,只要与这段代码有关系,就可能产生侵害的危险。 3

简单工厂模式

*爱你&永不变心* 提交于 2019-12-03 16:58:06
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。 优点 工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个 软件体系结构 的优化。 缺点 由于工厂类集中了所有实例的创建逻辑,违反了 高内聚 责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。 当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利; 这些缺点在 工厂方法模式 中得到了一定的克服。 代码实现 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DesignPattern { class Program { static void Main

三:java设计模式之工厂模式

眉间皱痕 提交于 2019-12-03 14:02:00
一、工厂模式的作用,为什么要用工厂模式? a.工厂模式是为了解耦:把对象的创建和使用的过程分开。就是Class A 想调用Class B,那么只是调用B的方法,而至于B的实例化,就交给工厂类。 b.工厂模式可以降低代码重复。如果创建B过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。可以把这些创建对象B的代码放到工厂里统一管理。既减少了重复代码,也方便以后对B的维护。 c.工厂模式可以减少错误,因为工厂管理了对象的创建逻辑,使用者不需要知道具体的创建过程,只管使用即可,减少了使用者因为创建逻辑导致的错误。 二、工厂模式的一些适用场景。 对象的创建过程/实例化准备工作很复杂,需要很多初始化参数,查询数据库等。 类本身有好多子类,这些类的创建过程在业务中容易发生改变,或者对类的调用容易发生改变。 三、简单工厂模式。 创建一个工厂类,在类中通过传入的参数不同创建不同的实体类。有新需求时需要更改工厂类中的代码,违背了开闭原则。 //创建抽象产品类 ,定义具体产品的公共接口; interface ICourse { /** * 录制视频 * @return */ void record(); } //创建具体产品类(继承抽象产品类), 定义生产的具体产品; class JavaCourse implements ICourse { public void

图解设计模式转载

岁酱吖の 提交于 2019-12-03 12:07:33
引用自图解设计模式:https://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html 车的类图结构为<<abstract>>,表示车是一个抽象类; 它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示; 小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示; 小汽车与发动机之间是组合关系,使用带实心箭头的实线表示; 学生与班级之间是聚合关系,使用带空心箭头的实线表示; 学生与身份证之间为关联关系,使用一根实线表示;强关联的静态关系。 学生上学需要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示;运行时产生的临时关系 简单工厂模式 Factory:工厂角色 工厂角色负责实现创建所有实例的内部逻辑 Product:抽象产品角色 抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口 ConcreteProduct:具体产品角色 具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。   优势:分离 对象的创建 和 对象本身业务处理,工厂方法是静态方法,只需要知道具体产品类所对应的参数   劣势:工厂类的职责相对过重,集中了所有产品创建逻辑,增加新的产品需要修改工厂类的判断逻辑   适用范围:工厂类负责创建的对象比较少