Factory Pattern

简单工厂模式

将变化的部分封装起来

 //简单工厂
class SimpleProductFactory{
Product createProduct(String type){
//选择--varied
if (type.equals("type1")){
product = new ...
}else if(...){
...
}else{
...
}
return product;
}
} Product orderProduct(String type){ SimpleProductFactory factory = new SimpleProductFactory(); Product product = factory.createProduct(type); //other operations... } //进一步封装
public class ProductStore{
SimpleProductFactory factory;
public ProductStore(SimpleProductFactory factory){
this.factory = factory;
} public Product orderProduct(String type){
Product product = factory.createProduct(type);
//other operations... }
} /*
这一步:
使用了一个Store类,包含了生产产品的方法。
factory在构造函数的时候传进来。
推迟了new操作。
*/

工厂方法模式

It defines an interface for creating an object, but lets subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclass.

 //工厂方法模式
public abstract class ProductStore{
public Product orderProduct(String type){
Product product = createProduct(type);
//product.test();
//other methods...
return product;
} protected abstract Product createProduct; //->工厂方法
//other methods...
}

抽象工厂模式

Abstract Factory creates a family of concrete objects together needed by the client.

 //抽象工厂模式

 //原料工厂
public interface ProductIngredientFactory{ public Ingredient1 createIngredient1();
public Ingredient2 createIngredient2();
public Ingredient3 createIngredient3();
//...
}
//具体的原料工厂类
//实现每一种对应的ingredient public class Product1 extends Product{
ProductIngredientFactory ingredientFactory;
public Product1(ProductIngredientFactory ingredientFactory){
this.ingredientFactory = ingredientFactory;
}
void prepare(){
ingredient1 = ingredientFactory.createIngredient1();
ingredient2 = ingredientFactory.createIngredient2();
ingredient3 = ingredientFactory.createIngredient3();
} } //重构产品商店
//每个具体的商店(继承自抽象的ProductStore)都要实现里面的工厂方法
//可能不止createProduct这一种工厂方法
//在这个工厂方法里,实现具体工厂的实例(包含了多个abstract方法),将具体工厂传入产品中 public class ProductStore1 extends ProductStore{ //implement an abstract method
protected Product createProduct(String type){
Product product = null;
ProductIngredientFactory ingredientFactory = new ProductIngredientFactory1(); //指定是原料工厂1,具体的类 if (type.equals("type1")){
product = new Product1(ingredientFactory);
}else if(...){
...
}else{
...
}
return product;
}
}

【设计模式】FactoryPattern工厂模式的更多相关文章

  1. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  2. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  3. 3. 星际争霸之php设计模式--简单工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  4. iOS 设计模式之工厂模式

    iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...

  5. 设计模式之工厂模式(Factory)

    设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...

  6. php设计模式:工厂模式

    php设计模式:工厂模式 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂模式实现: 工厂模式中任何创建对象的工厂类都要实现这个接口,实现接口的方法体中都要实现接口中的方法,它声明 ...

  7. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  8. java 设计模式之工厂模式与反射的结合

    工厂模式: /**  * @author Rollen-Holt 设计模式之 工厂模式  */   interface fruit{     public abstract void eat(); } ...

  9. C#学习之设计模式:工厂模式

    最近研究一下设计模式中工厂模式的应用,在此记录如下: 什么是工厂模式? 工厂模式属于设计模式中的创造型设计模式的一种.它的主要作用是协助我们创建对象,为创建对象提供最佳的方式.减少代码中的耦合程度,方 ...

  10. [JS设计模式]:工厂模式(3)

    简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料 ...

随机推荐

  1. python开发之路-day01

    1.Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为A ...

  2. 9、numpy——数组操作

    Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: (1)修改数组形状 (2)翻转数组 (3)修改数组维度 (4)连接数组 (5)分割数组 (6)数组元素的添加与删除 1.修改数组形状 函 ...

  3. python面试题之如何读取大文件

    ① 利用生成器generator ②迭代器进行迭代遍历:for line in file 文章转载自Python黑洞网

  4. python学习第十七天字符串的创建和操作方法

    字符串也是任何编程语言最常见的编程语言,字符串是有序的,可以通过下标来访问,可以切片,可以查找,可以替换,字符串可以和列表之间互相转换 join() split() 等函数 1,字符串的创建 单引号 ...

  5. mybatis where 中in的使用

    当我们使用mybatis时,在where中会用到 in 如: where name in ('Jana','Tom'); 我们可以在sql中直接写 name in ('Jana','Tom') 或者 ...

  6. Sass--扩展继承

    在 Sass 中也具有继承一说,也是继承类中的样式代码块.在 Sass 中是通过关键词 “@extend”来继承已存在的类样式块,从而实现代码的继承.如下所示: //SCSS .btn { borde ...

  7. TCP协议之三次握手四次挥手

    一.TCP协议简述 TCP协议位于传输层用来建立传输数据的通道以及传输数据,那么在这一层的tcp协议就涉及到客户端与服务端通信的连接,数据的传输.关闭连接. 通信的连接使用的就是客户端与服务端的三次握 ...

  8. CQOI2007 余数之和

    Time Limit: 5 Sec Memory Limit: 128 MB Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + ...

  9. 苹果正制造一款疯狂的“16K”VR耳机,效果到底有多牛?

    苹果一直以来都有传闻称正在研发一副增强现实眼镜,但今天的一份报告显示,他们希望在虚拟现实领域与Google,微软和Facebook竞争. 据CNET报道,苹果公司着眼于2020年发布的将AR和VR技术 ...

  10. 【leetcode】1025. Divisor Game

    题目如下: Alice and Bob take turns playing a game, with Alice starting first. Initially, there is a numb ...