工厂模式 抽象工厂模式

昨天我们说到了简单工厂模式,今天我们来说说工厂模式,还有抽象工厂模式。

工厂模式,顾名思义,就是在简单工厂模式的基础上继续优化,前面的简单模式当数量多时要改的地方很多,而且比较分散,修改起来比较麻烦,那么我们可以继续封装下。

var BookShop=function(type,content){
  if(type in BookShop.types){
    return new BookShop.types[type](content);
  }else{
    alert("未找到对象"+type);
  }
}
BookShop.types={
  Book:function(content){
    this.name="Book";
    this.content=content;
  },
  Newspaper:function(content){
    this.name="Newspaper";
    this.content=content;
  },
  Magazine:function(content){
    this.name="Magazine";
    this.content=content;
  }
};
var book=BookShop("Book","书");
var news=BookShop("Newspaper","报纸");
var mag=BookShop("Magazine","杂志");
console.log(book)
console.log(news)
console.log(mag)

通过上面的分装以后我们添加其他类就比较容易了,以后如果有新添加的只需在types里面增加就行了。就比如组件开发,后期有组件就只要直接添加到里面就好了,其他地方就不需要改了。这样可以减少出错率,加快效率,当然也更好维护。

抽象函数就是用来继承的,它是一个规范,给这一类对象定义了一些功能,它规定了一些方法你如果用的话就必须重写。如果没重写你去使用的话就会报错。

var absFactory=function(sonClass,parentClass){
  if(typeof absFactory[parentClass] === "function"){
    var F = function(){};
    F.prototype = absFactory[parentClass].prototype;
    sonClass.prototype = new F();
    sonClass.prototype.constructor=sonClass;
  }else{
    alert("未找到该对象")
  }
}
absFactory.Book=function(){};
absFactory.Book.prototype={
  getPrice:function(){
    return new Error(‘用之前必须重写‘);
  },
  getName:function(){
    return new Error(‘用之前必须重写‘);
  }
}
absFactory.Newspaper=function(){};
absFactory.Newspaper.prototype={
  getType:function(){
    return new Error(‘用之前必须重写‘);
  },
  getLocal:function(){
    return new Error(‘用之前必须重写‘);
  }
}

absFactory.Magazine=function(){};
absFactory.Magazine.prototype={
  getPrice:function(){
    return new Error(‘用之前必须重写‘);
  },
  getType:function(){
    return new Error(‘用之前必须重写‘);
  }
}

上面三个就是在一个工厂里面的三个抽象函数,在函数的原型上我们定义了函数自身必须要用的功能。

console.log("--------书-------");
var Letter=function(name,price){
  this.name=name;
  this.price=price;
}
absFactory(Letter,‘Book‘);
var letter=new Letter("明天","100");
console.log(letter);
console.log(letter.getName());
console.log(letter.getPrice());
Letter.prototype.getPrice=function(){
  return this.name;
}
Letter.prototype.getName=function(){
  return this.price;
}
console.log(letter.getName());
console.log(letter.getPrice());

console.log("--------杂志-------");
var Cartoon=function(price,type){
  this.price=price;
  this.type=type;
}
absFactory(Cartoon,‘Newspaper‘);
Cartoon.prototype.getPrice=function(){
  return this.price;
}
Cartoon.prototype.getType=function(){
  return this.type;
}
var cartoon=new Cartoon(59,"写实风格");
console.log(cartoon.getType());
console.log(cartoon.getPrice());

简而言之,工厂模式是用来创建类产品的实例,抽象工厂模式是用来对这种类的一些功能的规定。

时间: 2024-10-05 21:06:55

工厂模式 抽象工厂模式的相关文章

Java设计模式—工厂方法模式&抽象工厂模式

工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义:Creator为抽象创建 类,也就是抽象工厂,具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的. 工厂方法模式的扩展方式有很多种,下边是工厂方法模式一个比较实用的源代码: 抽象产品类: pub

23中设计模式----------抽象工厂模式

抽象工厂模式: 在上一篇中讲到通过各个具体球类(如:足球,篮球等)来继承总球类(Ball),来实现通过BallFactory对具体球类的生产. 不过,当时只是能造出不同球类,而在每种球类中肯定也有颜色,大小等不同的属性.所以,为了实现在工厂中添加属性.将抽象的Ball球类,修改成Bll接口,在该接口中添加所需要的方法: 这种模式是抽象工厂模式,抽象工厂模式是抽象方法模式的升级.在有多个业务品种,业务分级时,采用抽象工厂模式生产需要的对象是一种非常好的解决房还是.(比如,在生产球类的时候,不仅要分

简单工厂,抽象工厂,工厂模式三者的对比

简单工厂,抽象工厂,工厂模式三者的对比 作者: TindleWei 博客: http://blog.csdn.net/mennoa(转载请说明出处) GitHub: https://github.com/TindleWei 我想大家都熟悉工厂模式,但是要分清简单工厂,抽象工厂,工厂模式可能就没那么容易了.所以我查看了许多资料以及设计模式关于工厂模式的介绍,下面来总结一下. 前言 简单工厂,抽象工厂,工厂模式都属于创建型模式. 该模式的特点是抽象了实例化的过程.它们帮助了一个系统独立于如何创建.组

Java设计模式(创建型:工厂方法模式+抽象工厂模式)

设计模式根据目的准则可以分为三类: 创建型:creational 创建型的设计模式与对象的创建有关. 结构型:Structural 处理类和对象之间的组合. 行为型:behavioral 描述类和对象如何交互及如何分配职责. 工厂方法模式 站在使用者的角度,工厂方法模式是指使用者提出想要实现的具体功能或者说是想要生产的具体的东西的要求,在通过工厂制造之后就将该东西或功能交付给使用者.使用者并不知道实现的具体过程,只是做了要求提出以及实现的结果的使用. 严谨来说工厂方法模式(Factory Met

大话设计模式之简单工厂模式&工厂方法模式&抽象工厂模式

创造类模式分为三种:简单工厂模式,工厂模式和抽象工厂模式. 定义: 简单工厂模式:用一个单独的类来做创造实例的过程. 工厂模式:一个用于创建对象的接口,让子类决定实例化哪一个类,讲一个类的实例化 延迟到其子类. 抽象工厂模式:为创建一组相关或相互依赖的对象的类,而不指定具体类. 结构图: 这是简单工厂的结构图,从图中就很好理解. 简单工厂的优点: 根据用户需要,new出需要的对象. 但是简单工厂弊端: 当新加入一个功能是,就要修改工厂.这个时候,就需要工厂模式了. 从图中我们可以看出: 工厂模式

简单工厂,抽象工厂,工厂模式三者的对照

简单工厂,抽象工厂,工厂模式三者的对照 作者: TindleWei 博客: http://blog.csdn.net/mennoa(转载请说明出处) GitHub: https://github.com/TindleWei 我想大家都熟悉工厂模式,可是要分清简单工厂.抽象工厂.工厂模式可能就没那么easy了.所以我查看了很多资料以及设计模式关于工厂模式的介绍,以下来总结一下. 前言 简单工厂,抽象工厂.工厂模式都属于创建型模式. 该模式的特点是抽象了实例化的过程.它们帮助了一个系统独立于怎样创建

工厂模式&抽象工厂——HeadFirst设计模式学习笔记

当使用new实例化一个类时,使用的是实现,而不是接口,代码捆绑着具体类会导致代码更脆弱缺乏弹性,使用松耦合的OO模式可以得到解脱. 工厂:封装对象的创建,处理创建对象的细节 静态工厂:利用静态方法定义一个简单的工厂.优点:不需要创建工厂类的实例化.缺点:不能通过继承改变创建方法行为. 简单工厂:简单工厂并不是一种设计模式,因为只是简单的把创建对象的代码封装起来 工厂模式:在父类定义了一个创建对象的接口,通过让子类决定创建的对象是什么,来达到让对象创建的过程封装的目的.工厂方法让类把实例化推迟到子

创建型模式 抽象工厂

/** * 创建型模式 抽象工厂 * 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象. * * 抽象工厂(Creator)角色 * 抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口. * 具体工厂( Concrete Creator)角色 * 具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象. * 抽象(Product)角色 * 抽象

.Net简单工厂模式,工厂模式,抽象工厂模式实例

1.定义   简单工厂模式:是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类. 抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 2.实例 用工人种蔬菜的例子来说明,蔬菜植物的产品器官有根.茎.叶.花.果等5类,因此按产品器官分类也分成5种,分别是根菜类,茎菜类,叶莱类,花菜类以及果菜类.我们以根菜类,茎菜类为例,

创建和使用解耦——工厂模式详解(工厂方法+抽象工厂)

1.前言 直接new一个对象是最简单的创建对象的方式,但大量出现在业务代码中会带来至少两个问题.1:创建对象的细节直接暴露在业务代码中,修改实现细节必须修改相关的大量客户端代码.2:直接面向具体类型编程,违反了面向接口编程的原则,系统进行扩展时也不得不进行大量修改.要使得系统具有的良好的可扩展性以及后期易于维护,必须实现对产品的获取和对产品的使用解耦.要做到这两点,首先要对客户端代码屏蔽掉创建产品的细节,其次,客户端必须面向产品的抽象编程,利用java的多态特性在运行时才确定具体的产品.而这,正