工厂模式

23种设计模式-工厂模式

江枫思渺然 提交于 2020-02-29 22:07:59
什么是设计模式?设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。它是前辈们在开发中总结下来的一套经验,一套模型,掌握了设计模式会使我们写代码更加的行云流水 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。厂模式的本质就是用工厂方法代替new操作创建一种实例化对象的方式。一句话中总结就是方便创建 同种类型接口产品 的 复杂对象。举例:你需要一辆车,你只需要到厂里去提货,而不用去管这辆车是如何做出来的,只需要你会操作车就行了,说白了就是不把太多的逻辑实现暴露给客户端。 工厂分为普通工厂,静态工厂,抽象工厂 普通工厂eg: 创建一个寄件人接口,定义一个发消息的方法 package 静态工厂方法 ; //首先,创建二者的共同接口 //普通工厂模式:就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。 public interface Sender { public void Send ( ) ; } 定义两个类实现接口,一个发邮件一个发短信 package 静态工厂方法

设计模式入门

折月煮酒 提交于 2020-02-28 12:34:14
1、抽象工厂模式 适应变化的工厂(方法工厂),提供固定的调用环境,只要注入的工厂实现了统一的工厂接口,就可以正确的调用该工厂的方法。 2、单例模式 整个jvm只需要一个对象,节省创建消耗。 3、适配器模式 将一个类通过适配器使它转变为满足另一个接口。 4、装饰模式 将一个类通过装饰器使它增加一些变化,源类作为装饰器的构造参数,源类可见。 5、代理模式 将一个类通过代理器使它增加一些变化,源类作为代理的私有成员,源类不可见。 6、外观模式 将一组相关的类的行为通过外观类统一调用,减少内部细节的各个调用。 7、桥接模式 不同的实现类通过set方法注入,后面的调用就可调用正确的方法。 来源: oschina 链接: https://my.oschina.net/u/105376/blog/794774

设计模式 - Abstract Factory模式(abstract factory pattern) 详细说明

邮差的信 提交于 2020-02-27 20:22:23
Abstract Factory模式(abstract factory pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27091671 參考工厂模式 : http://blog.csdn.net/caroline_wendy/article/details/27081511 抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不须要明白指定详细类. 所有代码: http://download.csdn.net/detail/u012515223/7403553 详细方法: 1. 提供一个 抽象工厂(abstract factory)接口(interface)类 , 不同的 详细工厂(concrete factory) 继承此类. 代码: /** * @time 2014年5月26日 */ package factory; /** * @author C.L.Wang * */ public interface PizzaIngredientFactory { public Dough createDough(); public Sauce createSauce(); public Cheese createCheese(); public Veggies[]

python理解工厂模式

天涯浪子 提交于 2020-02-27 02:38:14
一、定义两个需要实例化的系列 class Kouzhao : def houdu ( self ) : pass class N95 ( Kouzhao ) : def houdu ( self ) : print ( '3 层 ....' ) class Yihu ( Kouzhao ) : def houdu ( self ) : print ( '3 层' ) class Putong ( Kouzhao ) : def houdu ( self ) : print ( '2 层 ....' ) class Job : def get_name ( self ) : pass class Doctor ( Job ) : def get_name ( self ) : print ( 'doctor' ) class Student ( Job ) : def get_name ( self ) : print ( 'student' ) 二、简单工厂模式 根据传入的参数返回相应的实例对象,一个工厂类来负责所有产品的创建,集中生产 def choose_kouzhao ( type ) : if type == 'n95' : return N95 ( ) elif type == 'yihu' : return Yihu ( ) elif type == 'putong'

Java 设计模式

混江龙づ霸主 提交于 2020-02-26 15:12:06
一 单例模式 : 解决的问题:就是可以保证一个类在内存中的对象唯一性。 public class SingleInstance { private static volatile SingleInstance singleInstance = null; private SingleInstance() { } public SingleInstance getInstance() { if (singleInstance == null) { //A synchronized (SingleInstance.class) { if (singleInstance == null) { singleInstance = new SingleInstance(); //B } } } return singleInstance; } } Note 1:添加volatile修饰避免B处指令重排序时其他线程拿到B处可能还未初始化的单例对象(完成了内存分配,引用的赋值 还未来得及进行对象的初始化)然后在A处判断单例对象不为空直接返回的未初始化的对象。 Note 2: synchronized关键字保证了临界区内变量的可见性和原子性,但无法保证临界区之外访问的变量的原子性。如果对单例对象的读写完全在临界区内,那么就不会出现线程安全问题。不过,这样就带来了性能问题。 Note 3

工厂模式

喜你入骨 提交于 2020-02-26 02:18:43
一、定义 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。因为工厂模式就相当于创建实例对象的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 INoodles { @Override public void desc ( ) { System . out . println ( "泡面" ) ; } }

二、设计模式总览及工厂模式详解

时光怂恿深爱的人放手 提交于 2020-02-25 22:11:32
二、架构师内功心法之设计模式 2.架构师内功心法之设计模式 2.1.课程目标 1、通过对本章内容的学习,了解设计模式的由来。 2、介绍设计模式能帮我们解决哪些问题。 3、剖析工厂模式的历史由来及应用场景。 2.2.内容定位 不用设计模式并非不可以,但是用好设计模式能帮助我们更好地解决实际问题,设计模式最重要的 是解耦。设计模式天天都在用,但自己却无感知。我们把设计模式作为一个专题,主要是学习设计模式 是如何总结经验的,把经验为自己所用。学设计模式也是锻炼将业务需求转换技术实现的一种非常有效 的方式。 2.3.回顾软件设计原则 设计原则 解释 开闭原则 对扩展开放,对修改关闭 依赖倒置原则 通过抽象使各个类或者模块不相互影响,实现松耦合。 单一职责原则 一个类、接口、方法只做一件事。 接口隔离原则 尽量保证接口的纯洁性,客户端不应该依赖不需要的接口。 迪米特法则 又叫最少知道原则,一个类对其所依赖的类知道得越少越好。 里氏替换原则 子类可以扩展父类的功能但不能改变父类原有的功能。 合成复用原则 尽量使用对象组合、聚合,而不使用继承关系达到代码复用的目的。 2.4.设计模式总览 写出优雅的代码 更好地重构项目 经典框架都在用设计模式解决问题 Spring就是一个把设计模式用得淋漓尽致的经典框架,其实从类的命名就能看出来,我来一一列举: 设计模式名称 举例 工厂模式

05设计模式

血红的双手。 提交于 2020-02-25 18:59:49
/*--> */ /*--> */ /*--> */ /*--> */ /*--> */ /*--> */ /*--> */ /*--> */ 1.单例模式   确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。 In [3]: class User: def __init__(self, name, password): self.name = name self.password = password In [4]: u1 = User("zs", "123") u2 = User("ls", "456") print(u1 == u2) #==判断表达式如果返回True,这两个对象是一个对象,并且内存地址相同 print("u1对象的内存地址:%s,u2对象的内存地址:%s" % (id(u1), id(u2))) False u1对象的内存地址:201311512,u2对象的内存地址:201310952   以上结果可以看出,执行结果为False,是不同的对象。 In [7]: # 伪单例模式 class User: __instance = None def __init__(self, name, password): self.name = name self.password = password

设计模式(工厂模式)

两盒软妹~` 提交于 2020-02-25 18:56:16
一、什么是设计模式 每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样你就能一次又一次地使用该方案而不必做重复劳动。” 每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计。 GoF(Gang of Four) 设计模式四个基本要素:模式名称、问题、解决方案、效果 二、设计模式七大原则 1、开放封闭原则:一个软件实体如类,模块和函数应该对扩展是开放的,对修改是关闭的。即软件实体应尽量在不修改原有代码的情况下进行扩展(装饰器) 2、里氏替换原则:重写父类里面的方法,逻辑可能不一样,但是返回的结果参数啥的要一样(所有引用基类的地方必须能透明的使用其子类的对象) 3、依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象,要针对接口编程,而不是针对实现编程。(接口类) 4、接口隔离原则:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要实现的接口 5、迪米特法则:一个软件实体应当尽可能少的与其他实体发生相互作用 6、单一职责原则:一个类只负责一项职责(不要存在多于一个导致类变更的原因,即一个类只负责一项职责) 7、合同复用原则:多用组合少用继承 一个类重用另一个类的代码有两种方式 继承 组合 a、下面来说一下接口隔离原则 接口隔离原则 #假如说现在有这样的动物类 from abc import

工厂模式

安稳与你 提交于 2020-02-25 12:50:30
工厂模式: 简单工厂模式: 简单介绍:属于 创建型模式 ,是工厂模式的一种 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 简单工厂模式是工厂模式家族中最简单实用的模式 就是 定义了一个创建对象的类,由这个类来封装实例化对象的行为 (代码) 在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式 但是 简单工厂模式中最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码 ,而且产品较多时,工厂方法代码逻辑将会非常复杂 代码演示: 首先创建几种商品: public interface Car { void produce ( ) ; } public class Baoma implements Car { public Baoma ( ) { this . produce ( ) ; } @Override public void produce ( ) { // TODO Auto-generated method stub System . out . println ( "生产的是宝马汽车" ) ; } } public class Benchi implements Car { public Benchi ( ) { this . produce ( ) ; } @Override public void