工厂模式

设计模式之工厂模式

浪尽此生 提交于 2019-12-03 01:38:04
下面例子中鼠标,键盘,耳麦为产品,惠普,戴尔为工厂。 简单工厂模式 简单工厂模式不是 23 种里的一种,简而言之,就是有一个专门生产某个产品的类。 比如下图中的鼠标工厂,专业生产鼠标,给参数 0,生产戴尔鼠标,给参数 1,生产惠普鼠标。 工厂模式 工厂模式也就是鼠标工厂是个父类,有生产鼠标这个接口。 戴尔鼠标工厂,惠普鼠标工厂继承它,可以分别生产戴尔鼠标,惠普鼠标。 生产哪种鼠标不再由参数决定,而是创建鼠标工厂时,由戴尔鼠标工厂创建。 后续直接调用 鼠标工厂.生产鼠标()即可 抽象工厂模式 抽象工厂模式也就是不仅生产鼠标,同时生产键盘。 也就是 PC 厂商是个父类,有生产鼠标,生产键盘两个接口。 戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。 创建工厂时,由戴尔工厂创建。 后续 工厂.生产鼠标()则生产戴尔鼠标, 工厂.生产键盘()则生产戴尔键盘。 在抽象工厂模式中,假设我们需要增加一个工厂 假设我们增加华硕工厂,则我们需要增加华硕工厂,和戴尔工厂一样,继承 PC 厂商。 之后创建华硕鼠标,继承鼠标类。创建华硕键盘,继承键盘类即可。 在抽象工厂模式中,假设我们需要增加一个产品 假设我们增加耳麦这个产品,则首先我们需要增加耳麦这个父类,再加上戴尔耳麦,惠普耳麦这两个子类。 之后在PC厂商这个父类中,增加生产耳麦的接口。最后在戴尔工厂

23种设计模式――工厂模式

匿名 (未验证) 提交于 2019-12-03 00:22:01
简历不要乱写 血的教训当时我也就是看过工厂模式然后简历就写了熟悉工厂模式,这狗命第一道题就是知道什么是工厂模式吗?就简单说了一个什么是工厂模式没说简单工厂,抽像工厂什么的丢人了。 1、工业革命以前,人们要是想造一个车,然后就自己做个车就结束了。(类似于正常的自己创建类) 2、工业革命以后出现了工厂,你还是想造一个车,然后就告诉工厂你想造什么车,工厂就你造出车子( 简单工厂模式) 3、生活水平上来了,不同的客户想要不同的车系 每一个车系都有一个厂子类,但是他们还都属于汽车厂这个抽象,你指定某一个具体的厂子 ,他就会给你生产出具体的车系。(工厂方法模式) 一、简单工厂模式 1、产品 } Tesla } ( ) { 2、工厂 public class Factory { { } 3、客户类 public class Customer { Tesla m } 二、工厂方法模式 1、产品 } Tesla } ( ) { 2、工厂 interface FactoryTesla { } } 3、客户 public class Customer { public static void main(String[] args){ } 三、抽象工厂模式 1、产品类 //发动机 public interface Engine { public class EngineA extends Engine {

工厂模式

匿名 (未验证) 提交于 2019-12-03 00:22:01
在一次面试中了解到工厂模式在实际应用中的重要性,可以说工厂模式的应用随处可见,以下是百度百科对工厂模式的介绍 实例化对象模式 了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的 可扩展性 和 尽量少的修改量 。 一.简单(静态)工厂模式 1,首先建立一个产品的抽象类 需要生产什么产品(实例对象)就需要首先建立一个相应产品的抽象类 public abstract class INoodles { /** * 描述每种面条啥样的 */ public abstract void desc (); } 2.再建立几种具体的产品类如: 这里建立了三个产品类:兰州拉面,泡面,干扣面(没吃过) public class LzNoodles extends INoodles { @Override public void desc () { System.out.println( "兰州拉面" ); } } public class PaoNoodles extends

02工厂模式(创建型模式)

匿名 (未验证) 提交于 2019-12-03 00:19:01
有代码,虽然某种程度不符合设计原则,但实际使用最多) 增加产品族,不可以增加产品,可以增加产品族) 示例代码 public interface Car { void run(); } 示例代码 public interface Car { void run(); } public interface CarFactory { Car createCar(); } public class KaCheFactory implements CarFactory { @Override public Car createCar() { return new KaChe(); } } public class QiCheFactory implements CarFactory { @Override public Car createCar() { return new QiChe(); } } public class Client { public static void main(String[] args) { Car c1 = new KaCheFactory().createCar(); Car c2 = new QiCheFactory().createCar(); c1.run(); c2.run(); } } 简单工厂模式和工厂方法模式PK: 示例代码 public

设计模式---工厂模式

匿名 (未验证) 提交于 2019-12-03 00:13:02
简单列一下这个模式的家族: 1、静态工厂模式 这个最常见了,项目中的辅助类,TextUtil.isEmpty等,类+静态方法。 2、简单工厂模式(店里买肉夹馍) 定义:通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 根据类型直接创建肉夹馍: SimpleRoujiaMoFactory.java public RoujiaMo creatRoujiaMo(String type) { RoujiaMo roujiaMo = null; switch (type) { case "Suan": roujiaMo = new ZSuanRoujiaMo(); break; case "La": roujiaMo = new ZLaRoujiaMo(); break; case "Tian": roujiaMo = new ZTianRoujiaMo(); break; default:// 默认为酸肉夹馍 roujiaMo = new ZSuanRoujiaMo(); break; } return roujiaMo; } 3、工厂方法模式(开分店) 定义:定义一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法模式把类实例化的过程推迟到子类。 对比定义: 1、定义了创建对象的一个接口:public abstract RouJiaMo

工厂模式

匿名 (未验证) 提交于 2019-12-03 00:09:02
#工厂package com.spring.base; import java . io . IOException ; import java . util . HashMap ; import java . util . Map ; import java . util . Properties ; public class ServiceFactory { private static final String CONF_FILE_NAME = "conf.properties" ; private static Properties prop ; private static Map < String , Object > beanContainer ; //静态代码块作用:每次初始化这个类时只加载配置文件 static { try { beanContainer = new HashMap <>(); prop = new Properties (); prop . load ( ServiceFactory . class . getClassLoader (). getResourceAsStream ( CONF_FILE_NAME )); } catch ( IOException e ) { // e.printStackTrace(); throw new

工厂模式总结

匿名 (未验证) 提交于 2019-12-02 23:55:01
1.简单工厂――一个工厂创建多类产品(对象) 简单工厂模式(SimpleFactory Pattern)是指由一个工厂对象决定创建出哪一种产品类的实例,但它不属于GOF,23种设计模式(参考资料:http://en.wikipedia.org/wiki/Design_Patterns#Patterns_by_Type)。简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数(类的名字,或者类的class对象),对于如何创建对象的逻辑不需要关心。以课程为例,首先创建接口及其具体的实现: 1 package com.gupaoedu.vip.pattern.factory; 2 3 public interface ICourse { 4 //录制课程 5 void record(); 6 } 1 package com.gupaoedu.vip.pattern.factory; 2 3 public class JavaCourse implements ICourse { 4 @Override 5 public void record() { 6 System.out.println("录制Java课程..."); 7 } 8 } 1 package com.gupaoedu.vip.pattern.factory; 2 3 public class

工厂模式的一个简单实现

匿名 (未验证) 提交于 2019-12-02 23:49:02
public class TestFactory { /** * */ private static Map < String , TestInterface > beanMap = ContextUtil . getContext (). getBeansOfType ( TestInterface . class , false , false ); public static TestInterface getInstance ( String infType ) { TestInterface curInstance = null ; for ( String beanName : beanMap . keySet ()) { TestInterface instance = beanMap . get ( beanName ); if ( instance . getType () == null ) throw new RuntimeException ( "接口实现类类型不可以为空" ); else { if ( infType . equals ( instance . getType ())) { curInstance = instance ; break ; } } } return curInstance ; } } 根据 Spring

Python笔记:工厂模式

匿名 (未验证) 提交于 2019-12-02 22:51:30
工厂模式: “工厂”即表示一个负责创建其他类型的对象的类,通常情况下,一个工厂的对象会有一个或多个方法与之关联,这些方法用于创建不同类型的对象,工厂对象会根据客户端给方法传递的不同的参数或者客户端调用不同的方法返回不同的对象。 优点: 对象的创建是可以根据需要单独创建的,但是使用工厂模式来创建对象有以下优点: 松耦合,对象的创建是根据工厂类来进行的,与类本身的实现是独立开来的。 对于客户端来说,不需要知道类的具体实现,只需要调用相应接口就可以得到需要的对象了,这其实是简化了客户端的相关实现。 对于对象的修改只需要在工厂里面进行即可,包括添加新的对象,客户端只需要更改少量的代码,甚至可以不修改代码就可以达到要求。 使用工厂接口,还可以重用已有的对象,不用去别处调用已有的对象或者重新创建一个对象。 工厂模式的3种实现形式(或者说3中变体): 简单工厂模式: 工厂类会提供一个接口,并根据客户端传入参数来创建相应的实例对象。(创建一个对象) 工厂方法模式: 需要定义一个基类,不同的子类则代表着不同类型的对象。相对于简单工厂模式而言,工厂方法模式具有更强的可定制性。(创建一个对象) 抽象工厂模式: 需要定义一个抽象工厂类,然后由不同的子类来创建不同系列的对象,一个系列即代表一组对象。(创建一组对象) 简单工厂模式示例: from abc import ABCMeta ,

Python:设计模式之工厂模式

匿名 (未验证) 提交于 2019-12-02 22:51:30
版权声明:本文为博主原创文章,欢迎转载,请注明出处 https://blog.csdn.net/mouday/article/details/91817823 工厂: 表示负责创建其他类型对象的类 优点: 1、松耦合,对象的创建可以独立于类的实现 2、客户端无需了解创建对象的类,但是可以使用它来创建对象。只需要知道需要传递的接口,方法和参数 3、工厂中添加其他类来创建其他类型的对象,无需更改客户端代码 4、工厂可以重用现有对象 分类 1、简单工厂模式 允许接口创建对象,但不会暴露对象的创建逻辑 2、工厂方法模式 允许接口创建对象,但使用哪个类来创建对象,则交由子类决定 3、抽象工厂模式 抽象工厂是一个能创建一系列相关对象,而无需指定/公开具体类的接口, 该模式能够提供其他工厂的对象,在其内部创建对象 简单工厂模式 # -*- coding: utf-8 -*- from abc import ABC , abstractmethod class Animal ( ABC ) : @abstractmethod def say_hi ( self ) : pass class Dog ( Animal ) : def say_hi ( self ) : print ( "汪汪汪..." ) class Cat ( Animal ) : def say_hi ( self ) :