工厂模式

设计模式

混江龙づ霸主 提交于 2020-01-20 01:00:02
设计模式是什么? Christopher Alexander:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样你就能一次又一次地使用该方案而不必做重复劳动。” 设计模式是经过总结、优化的,对我们经常会碰到的一些编程问题的可重用解决方案。一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码。反之,设计模式更为高级,它是一种必须在特定情形下实现的一种方法模板。设计模式不会绑定具体的编程语言。一个好的设计模式应该能够用大部分编程语言实现(如果做不到全部的话,具体取决于语言特性)。最为重要的是,设计模式也是一把双刃剑,如果设计模式被用在不恰当的情形下将会造成灾难,进而带来无穷的麻烦。然而如果设计模式在正确的时间被用在正确地地方,它将是你的救星。 起初,你会认为“模式”就是为了解决一类特定问题而特别想出来的明智之举。说的没错,看起来的确是通过很多人一起工作,从不同的角度看待问题进而形成的一个最通用、最灵活的解决方案。也许这些问题你曾经见过或是曾经解决过,但是你的解决方案很可能没有模式这么完备。 虽然被称为“设计模式”,但是它们同“设计“领域并非紧密联系。设计模式同传统意义上的分析、设计与实现不同,事实上设计模式将一个完整的理念根植于程序中,所以它可能出现在分析阶段或是更高层的设计阶段。很有趣的是因为设计模式的具体体现是程序代码

设计模式

為{幸葍}努か 提交于 2020-01-19 06:19:45
定义:一种反复被使用、多人知晓的、经过分类编目的代码的设计经验总结。 好处:   1便于使用者快速理解和掌握框架   2实现代码的可重用,更容易让他人理解,保证代码可靠性 一、单例模式(保证一个类有且仅有一个实例,并提供一个访问它的全局访问点)   解决方案:对类定义静态方法用于返回单实例对象 二、工厂模式:(根据“需求”生产“产品”)   1、简单工厂模式     (1)创建一个工厂类和各个产品类     (2)工厂类:方法:Product getProduct(int i) 根据输出值返回对应的实现Product的产品类实例   2、工厂模式(在简单工厂的基础上解决随着产品类增加判断条件的增加的问题)     (1)创建一个工厂接口:定义获取产品类的抽象方法 创建一个产品类接口:定义它的属性和抽象方法     (2)创建一个工厂实现类和对应的产品类     即一个工厂生产一种产品 但是不适应于产品族   3抽象工厂模式(在工厂模式上实现产品族概念)     (1)创建一个抽象工厂:定义各个获取产品类的抽象方法 创建各个产品类接口     (2)创建一个工厂实现类和对应所有的产品类 来源: https://www.cnblogs.com/YangJM/p/7553849.html

工厂模式

♀尐吖头ヾ 提交于 2020-01-17 00:16:01
概述 工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 实例 例举披萨店的例子,一个披萨店卖三种披萨,奶酪披萨、希腊披萨,胡椒披萨,他们分别继承自pizza类。 pizza类 public abstract class Pizza { private String name;//名字 //准备原材料,不同的披萨不一样,因此,我们做成抽象方法 public abstract void prepare(); public void bake(){ System.out.println(name+"baking"); } public void cut(){ System.out.println(name+"cutting"); } //打包 public void box(){ System.out.println(name+"boxing"); } public void setName(String name) { this.name = name; } } 奶酪披萨类 继承自Pizza类实现其prepare() 方法,胡椒披萨、希腊披萨同理。 public class CheesePizza extends Pizza {

设计模式——抽象工厂模式

爱⌒轻易说出口 提交于 2020-01-13 18:13:37
背景 有一个生产王国的工厂,可以生产城堡、国王、军队。 国王也有不同的分类 军队也有不同的种类 城堡也有不同的种类 实现方式一 KingdomFactory:国王加工的工厂接口 ElfKingdomFactory:具体加工国王王国的工厂类,可以生产出来一些列的王国信息 Castle:城堡的基类 ElfCastle:具体的城堡实现类,实现了Castle 其他的类实现细节与上述的功能一致 方式二 该类图在上述的基础上,增加了工厂制造的类FactoryMaker,可以屏蔽掉client端对具体国王王国加工厂的细节。遵循了开闭原则 来源: CSDN 作者: LuckyZhouStar 链接: https://blog.csdn.net/ZHOUCHAOQIANG/article/details/103959567

设计模式:工厂方法模式

若如初见. 提交于 2020-01-13 05:34:24
本文转载自: https://www.cnblogs.com/li-peng/archive/2013/02/17/2913568.html 作者:li-peng 转载请注明该声明。 之前写了 设计模式系列目录 今天说一下工厂方法模式: 定义了一个创建对象的接口,但由子类 决定 要实例化的类是哪一个。工厂方法让类把实例化推迟到子类 所谓的决定并不是批模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需知道创建的产品是哪一下,选择了使用 哪个子类,就决定了实际创建的产品是什么。 1 #region 工厂模式 2 3 // 产品 4 public abstract class Product 5 { 6 public string productName; 7 } 8 9 // 建造者 10 // 工厂方法是创建一个框架,让子类决定要如何实现具体的产品 11 public abstract class Creator 12 { 13 public Product FactoryMethod( string f_ProductType) 14 { 15 Product _product; 16 _product= CreateProduct(f_ProductType);         //可对产品做其它的操作...... 17 return _product; 18 } 19

策略模式vs工厂模式的区别

帅比萌擦擦* 提交于 2020-01-12 16:00:26
定义: 工厂模式的思想主要为:多个类似的子类继承同一个父类,对其父类中的变量进行操作;工厂类负责判断、控制哪个子类被执行,而工厂类调用子类完成后,返回的结果是该子类的父类,该父类中的变量已经被操作过了,访问该父类,得到我们想要的结果 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 1. 相似: 在模式结构上,两者很相似; 2.差别: 用途不一样 工厂是创建型模式,它的作用就是创建对象; 策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为; 关注点不一样 一个关注对象创建 一个关注行为的封装 解决不同的问题 工厂模式是创建型的设计模式,它接受指令,创建出符合要求的实例;它主要解决的是资源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。主要应用在多数据库选择,类库文件加载等。 策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族,分别封装起来,让他们之间可以相互替换,策略模式让策略的变化独立于使用策略的客户。 工厂相当于黑盒子,策略相当于白盒子; 策略模式例子 例1、 (1)策略模式的核心就是对算法变化的封装。 定义一个通用算法协议,让每个算法遵守其规则。 @protocol LHPlayerProtocol <NSObject> /** * Player开启视频

策略模式和工厂模式的区别

亡梦爱人 提交于 2020-01-12 06:54:41
转载至 http://www.cnblogs.com/me115/p/3790615.html 工厂模式和策略模式看着很像,经常让人混淆不清; 它们的区别在哪里,需要细细体味; 相似点 在模式结构上,两者很相似; 差异 用途不一样 工厂是创建型模式,它的作用就是创建对象; 策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为; 关注点不一样 一个关注对象创建 一个关注行为的封装 解决不同的问题 工厂模式是创建型的设计模式,它接受指令,创建出符合要求的实例;它主要解决的是资源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。主要应用在多数据库选择,类库文件加载等。 策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族,分别封装起来,让他们之间可以相互替换,策略模式让策略的变化独立于使用策略的客户。 工厂相当于黑盒子,策略相当于白盒子; 举例说明 工厂模式 有一天你决定去吃培根披萨,首先得选择店铺,A店和B店都有培根披萨; 你点了A店的培根披萨,过了二十分钟,你的披萨就来了就可以吃到了。但这个披萨是怎么做的,到底面粉放了多少,培根放了多少,佐料放了多少,有多少道工序,你是不需要管的,你需要的是一个美味培根披萨。 策略模式 在披萨店,你要一个培根披萨,老板说有标准的pizza,也可以自己去做。原料有培根、面粉、佐料。工序有1、2、3工序

五、工厂模式 ( Factory Pattern )

我们两清 提交于 2020-01-12 01:48:42
工厂模式(Factory Pattern)提供了一种创建对象的最佳方式 工厂模式在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象 工厂模式属于创建型模式 摘要 1、 意图: 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行 2、 主要解决: 主要解决接口选择的问题 3、 何时使用: 我们明确地计划不同条件下创建不同实例时 4、 如何解决: 让其子类实现工厂接口,返回的也是一个抽象的产品 5、 关键代码: 创建过程在其子类执行 6、 应用实例: 1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现 2、Hibernate 换数据库只需换方言和驱动就可以 7、 优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以 3、屏蔽产品的具体实现,调用者只关心产品的接口 8、 缺点: 每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖 这并不是什么好事 9、 使用场景: 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方 2、数据库访问

工厂模式和策略模式区别

旧城冷巷雨未停 提交于 2020-01-11 08:29:20
先上代码: 定义一个抽象类 //抽象类 abstract class AbsClass { //抽象方法:提供一些列的算法操作 public abstract void acceptCash(string org); } //继承自抽象类 class A:AbsClass { //具体方法:提供一些列的算法操作 public override double acceptCash(string org) { Console.WriterLine("A类方法"); } } //继承自抽象类 class B:AbsClass { //具体方法:提供一些列的算法操作 public override double acceptCash(string org) { Console.WriterLine("B类方法"); } } 简单工厂模式: //现金收取工厂 class CashFactory { //根据条件返回相应的对象 public static AbsClass createCashAccept(string type) { AbsClass cs = null; switch (type) { case "A": cs = new Al(); break; case "B": cs = new B(); break; case "...": ........ .... break;

工厂模式

心已入冬 提交于 2020-01-11 02:40:48
2.5工厂模式 使用者可以直接消费产品而不需要知道其生产的细节 组成角色: 抽象产品(描述产品的公共接口,如水桶具备盛水功能) 具体产品(公共接口的实现类,如圆桶,方桶) 工厂(根据传入的参数生产不同的产品) 2.5.1简单工厂模式 public interface Api { //定义一个接口方法 void operation ( ) ; } public class ApiImplA implements Api { @Override public void operation ( ) { System . out . println ( "this is A" ) ; } } public class ApiImplB implements Api { @Override public void operation ( ) { System . out . println ( "this is B" ) ; } } /** * @author pandas * @ClassName SimpleFactoryMode * @Description 简单工厂的核心思想是选择实现 * @create 2020/1/7 8:01 */ public class SimpleFactoryMode { public static Api createApiStatic ( int