设计模式——工厂模式(简单工厂)

一、什么是工厂模式:

  在人类社会发展中,起初人们生活所需品都是自供自给,饭菜,衣服,家具都是由自己制作,这样感觉人们要和很多行业有接触,很麻烦。后来逐渐出现了各种”工厂“,由他们代替你去生产所需品,你要什么式样的东西只要告诉它们,它们就会给你生产好,这样你可以抽出大量精力去做其他重要的事了。

  在程序世界中也一样,以前每当我们需要什么实例对象,都是自己new出来的,这样的坏处是会和很多类有牵连,耦合度高(要new一只狗,就要引入Dog类,要new一只猫,就要引入Cat类),那我们完全可以像真实世界中一样,把这项工作交给”工厂“去办,我们要创建什么类型的实例,只要给工厂传入某种参数告知他们就行了,工厂会替你创建实例对象。这便是工厂模式思想。工厂模式分三种:简单工厂模式,工厂方法模式,抽象工厂模式。本篇讲解简单工厂模式。

二、简单工厂模式:

  

  简单工厂模式是工厂模式中最简单简陋的形式。它的工厂类就是一个实实在在的具体工厂类,里面有逻辑判断,它会判断你传入的不同参数而创建不同的实例。按理说这样没问题,但这样是不完美的请看例子:

//抽象产品类:定义一类产品,接口或抽象类
public interface Animal
{
    public void run(); //接口只声明方法,不实现
}
//具体产品类1:Dog类实现Animal接口
public class Dog implements Animal
{
    public void run()
    {
         System.out.println("狗run!");
    }
}
//具体产品类2:Cat类实现Animal接口
public class Cat implements Animal
{
    public void run()
    {
         System.out.println("猫run!");
    }
}
//具体工厂类:传入参数,生成不同的动物。
public class Factory
{
    public Animal create(String str)
    {
        if(str.equals("dog"))
            return new Dog();
        if(str.equals("cat"))
            return new Cat();
    }
}
//主程序:要用到实例的类
public class Main()
{
    public static void main(String[] args)
    {
        Factory fact = new Factory();
        Dog dog = (dog)fact.create("dog"); //传入dog参数,生产对象
        Cat cat = (cat)fact.create("cat");
    }
}

该简单工厂的例子的不足之处是:当产品种类增加时,程序员除了新建这个具体产品类外,还得在工厂类里增添判断逻辑,也就是说要修改已经存在的类,这样不利于维护。如果改变了需求,我们的处理原则是创建新的类,在新的地方写新需求,而不是去修改原来的代码。所以,我们改进了简单工厂模式,想出了工厂方法模式。工厂方法模式到底是怎么样的?请见下篇。

 

时间: 2024-11-05 16:12:58

设计模式——工厂模式(简单工厂)的相关文章

工厂模式——简单工厂模式

工厂模式分三类:简单工厂模式.工厂方法模式.抽象工厂模式. 首先介绍比较简单一种工厂模式——简单工厂模式. 我们以计算器作为一个例子来说明工厂模式到底是什么.作为一个几年前大一从C语言起步的初级程序员,到现在写代码的思维还是停留在结构化编程,虽然Java学了有几年了,总是说面向对象面向对象.但是让实现一个计算器的程序,估计大部分人都会以C语言式的结构化编程来写,几个if语句或者一个switch来搞定.我也同样不例外,为了提高自己的编程水平,所以一点点开始学设计模式.其实在很多开源代码里也有很多经

JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象实

详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)

园子里关于23种设计模式的博文已经可以说是成千上万.车载斗量.屯街塞巷.不计其数.数不胜数.摩肩接踵.汗牛充栋.车水马龙.门庭若市.琳琅满目直至让人眼花缭乱了.在这样的大环境下之所以来写设计模式类的博文,并不是像一些"非主流"的爱情观那样"宁缺毋滥". 只是其一呢,因为相当于给自己做一个总结,加深一下自己这方面的认识,因为掌握了和把它写出来我感觉后者还可以对技能有一个提升,其二呢是因为最近公司有一个内部的training需要讲设计模式. v写在前面 在这里呢,需要向

总结工厂模式---简单工厂、工厂方法、抽象工厂

简单工厂 首先,我们先看一个简单工厂的例子: #coding=utf-8 class Mercedes(object): """梅赛德斯 """ def __repr__(self): return "Mercedes-Benz" class BMW(object): """宝马 """ def __repr__(self): return "BMW&quo

工厂模式,简单工厂模式,抽象工厂模式三者有什么区别

工厂模式,也叫做说虚构造器,在简单工厂中间插入了一个具体产品工厂,这个工厂知道产品构造时候的具体细节,而简单工厂模式的产品具体构造细节是在一个个if/else分支,或者在switch/case分支里面的.工厂模式的好处就在于将工厂和产品之间的耦合降低,将具体产品的构造过程放在了具体工厂类里面.在以后扩展产品的时候方便很多,只需要添加一个工厂类,一个产品类,就能方便的添加产品,而不需要修改原有的代码.而在简单工厂中,如果要增加一个产品,则需要修改工厂类,增加if/else分支,或者增加一个case

设计模式之工厂模式-简单工厂(02)

设计模式分创建型.行为型.结构型: 工厂模式属于创建型模式,分(1)简单工厂(静态工厂)(2)工厂方法(3)抽象工厂,下面分别通过代码来介绍(本篇文章北风网的视频看后写的): (一)简单工厂 简单工厂描述:通过专门定义的一个类来创建其他类的实例,被创建的实例通常都具有共同的父类: 简单工厂的角色及其职责:(1)工厂角色[creator]:该模式的核心,负责创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需要的产品实例(2)抽象角色[Product]:简单工厂模式 所创建的所有对象的父类,

设计模式之工厂模式(简单工厂,工厂方法,抽象工厂)

设计模式6大原则:1.开闭原则:对拓展开放,对修改关闭2.单一职责原则:一个类只复杂一项职责3.里氏原则:子类可以扩展父类的功能,但不改变父类原有的功能4.依赖倒置原则:面向接口编程5.接口隔离原则:设计接口功能尽量细粒度,最小功能单元6.迪米特法则:降低耦合度(局部变量中,不要引入新的类) 这里对工厂模式做一个学习记录 这里用简单计算器来举例. 很简单,我们需要3个输入: a1 代表第一个数字 a2 代表第二数字 operator 代表运算符 这三个参数输入后得到一个输出result 1.平时

工厂模式-简单工厂

1.简单工厂模式 1.1.什么是简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式.简单工厂模式是由一个工厂对象决定创建出哪一类产品类的实例.由一个工厂类根据传入的参数来决定创建出哪一种产品类的实例. 1.2.简单工厂模式的结构 工厂类(Creator)角色:工厂方法模式的核心,含有与应用紧密相关的逻辑.工厂类在客户端的调用下直接创建产品对象.往往由一个具体的Java类实现. 抽象产品(Product)角色:工厂方法模式所创建的对象的父类,或他们共同拥有的接口.抽象产品角色可以用一

工厂模式--简单工厂模式

工厂模式用于实现逻辑的封装,并通过公共的接口提供对象的实例化服务,在添加新的类时装修要做少量的修改. 1.简单工厂模式 通过反射机制进行类注册的简单工厂模式 通过反射机制注册产品类对象和实例化 注册产品对象并向每个产品添加newInstance方法,该方法返回与自身类型相同的新实例 //实例对象父类 public class Vehicle { } //vehicle工厂类public class VehichleFactory { // 用map对象保存产品ID及其对应的分类 private

一(3)抽象工厂模式&&简单工厂+反射改进抽象工厂

1 抽象工厂? 抽象工厂用在既有产品树,又有产品族的场合. 产品树:奔驰旗下的跑车和商务车构成产品树 产品族:奔驰旗下的跑车与奥迪旗下的跑车构成产品族./*缺点:此时如果需要增加一个红旗厂家的车,需要改的地方很多.1 定义红旗抽象类,具体类:2 Factory接口增加生产红旗的工厂:3 跑车工厂和商务车工厂都需要实现相应的生产红旗的接口.*//* 优点:当需要使用不同产品时,只需要改一行代码 Factory factory = new SprotCarFactory();,即初始化不同的工厂,就