工厂模式的理解

工厂模式的定义

工厂模式叫虚拟构造,多态工厂,工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一个类

用UML的类图如下;看附件

工厂方法创建对象的接口,工厂方法把实例推迟到子类

为了更好的理解工厂模式,我举一个例子,在一个在一个医院里有不同的科室,创建一个医院接口,实现两个不同的科室实现医院的接口,方法是创建新的对象,就是创建不同的医生对象,然后再创建一个医生接口,实现不一样的医生,在工厂中创建,然后就可以降低对象和对象之间的耦合度,提高了系统的灵活性。可以通过工厂方法调用不同医生的调度。

工厂模式的优势

应用程序的实例对象都放在一个地方来进行创建,利于对对象的管理和规划,对传值的操作有统一的规划

在不修改应用程序其他类和参数的情况下类和对象,并对应用程序的持久性有更好的维护和升级

工厂模式的使用场景

1.一个系统应当不依赖于产品类实例被创立,就是实例的改变并不影响其他实例的使用。 
2.这个系统的产品很多的时候,不知道该调用哪一个实例。应该考虑使用工厂模式 
3.同属于一个实例,应该考虑不同的影响,从而减少依赖 
4.不同的产品以一系列的接口的面貌出现,从而使系统不依赖于接口实现,从而很好地去恪守接口隔离的原则。

例子:

把三好学生的描述作为例子

首先创建班级接口

public interface IClassFactory {

IStudent CreateStudent();

}

然后创建实现班级接口类

/**

*

* @author lxh

*

*/

1.public class IClassOneFactory implements IClassFactory {

@Override

public IStudent CreateStudent() {

// TODO Auto-generated method stub

return new Student1();

}

}

2.

public class IClassTwoFactory implements IClassFactory {

@Override

public IStudent CreateStudent() {

// TODO Auto-generated method stub

return new Student2();

}

}

创建接口ISudent

public interface IStudent {

public int SkillOne();

public void SkillTwo();

public void Industry();

}

创建实现类

public class Student1 implements IStudent {

@Override

public int SkillOne() {

// TODO Auto-generated method stub

int ss=11;

System.out.println("刻苦勤奋,勇于创新");

return ss;

}

@Override

public void SkillTwo() {

// TODO Auto-generated method stub

System.out.println("学习努力,有上进心");

}

@Override

public void Industry() {

// TODO Auto-generated method stub

System.out.println("吃苦,勤劳勇敢");

}

public String toString(Object String){

String s="优点1:"+this.SkillOne();

return s;

}

}

学生2:。。。

创建测试类

/**

* <h1>工厂模式</h1>

*

* @author lxh

*

*/

public class ClientTest {

/**

* <br>工厂方法模式实现时,客户端需要决定实例化那个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。

* 你想要加的功能,本来是改工厂类的,而现在是修改客户端。

*

*/

public static void main(String[] args) {

System.out.println("学生1:");

IClassFactory factory=new IClassOneFactory();

IStudent becility=factory.CreateStudent();

becility.SkillOne();

becility.SkillTwo();

//becility.Industry();

System.out.println("学生2:");

IClassFactory factory2=new IClassTwoFactory();

IStudent industry=factory2.CreateStudent();

// industry.SkillOne();

//  industry.SkillTwo();

industry.Industry();

}

}

结果:

学生1:

刻苦勤奋,勇于创新

学习努力,有上进心

学生2:

任劳任怨,是个好学生

通过这个学习,对工厂模式的创建和实现有进一步的实现,对设计模式的简洁与应用的场景有更好的了解,在实践中应用生活的例子,让学习更有感觉。发现生活中的美才是学习的最好的诠释。

应用:

javaweb设计模式之道

 

时间: 2024-08-07 04:10:42

工厂模式的理解的相关文章

设计模式之abstract factory工厂模式的理解

研究了一下工厂模式,对它的应用场景和网上的众多说法进行了思考,总结如下. 几个疑问点: 1.网上说用factory,就可以不用自己new了,但是疑问在于,不直接依赖,转而间接依赖,作用是什么?节省了代码量?易于扩展? 2.书上说,一个系统要独立于它的产品的创建.组合和表示时.一个系统要由多个产品系列中的一个来配置时.当你要强调一系列相关的产品对象的设计以便进行联合使用时.当你提供一个产品类库,而只想显示它们的接口而不是实现时,就应该使用工厂模式.但是疑问在于,这他妈说的都是啥? 于是开始了我的思

js对于工厂模式的理解

有很多人对工厂模式有着这样或者那样不理解的地方,今天我就和大家分享一下我的心得. 其实工厂模式是基于面向对象的一种模式.大家先看这样的一段代码: 其实这个程序很简单,学过js的人都会写,基本没什么问题.但是大家马上会意识到一个问题就是如果有100的对象会出现什么效果呢,没有错!代码会变得相当的多,这样加载起来会相当的慢,那么怎么解决这个问题呢?我相信大家都想到了吧!没错,就是把他封装起来,代码如下: 这个就是封装后的代码,其实这个就是一个简单的工厂模式,为什么这么说呢因为他的工作原理很像是在工厂

Android 工厂模式,三种工厂模式的理解

工厂模式是一种创建者模式,在任何生成复杂对象的地方都可以使用工厂模式.理论来说在任何使用A a = new A()的方式都可以使用工厂模式,虽然使用工厂模式可能需要多做一些工作,但是在后续的开发和维护都带来了方便. 如果我们需要在构建对象的时候,需要做很多的处理工作,比如初始化工作,查询工作等一些耗时的工作,如果我们将这些操作全部放入到构造方法中去写,那么势必在后期维护的带来不方便,而且始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很

简单工厂模式自我理解

简单工厂设计模式 1.首先创建一个人的旅游的方法 private Interface1 jiaoton = gongchang.jiaotong(); //人从工厂得到一个对象法 public void ff() { Console.WriteLine("我在旅游"); jiaoton.row(); } 2.创建一个跑的接口 (共同的行为) public interface Interface1 { void row(); } 3.创建一个具体的跑的对象(车)并且继承跑的接口 publ

简单工厂模式(理解手打)

好处:将创建和使用分离,降低耦合 坏处: 1.Factory责任重大,出错将导致创建全部失败, 2.添加新的产品,则需要添加新的子类判断 使用场景: 1.工厂类负责创建的对象比较少,不会造成工厂方法中的业务逻辑太过复杂 2.客户端只知道传入工厂类的参数,不关心如何创建对象

[email&#160;protected]_LabVIEW工厂模式理解

前言 折腾了一天,基本上搞清楚了简单工厂.工厂模式 理解 无论是简单工厂还是工厂模式,都有一个特点,即工厂加工的方式是不变的,产品的类型可以不断扩展:如果加工方式也会变化,修改工厂模式的加工方式会导致工厂原有的一些内容发生改变,此时要使用策略模式,利用组合实现更多的可配置: 简单工厂模式 简单工厂模式UML 理解 简单工厂模式实际上是将初始化实例的内容放在了一个工厂类里面,通过一个参数,实现类的实例化,适用于只知道传入了工厂类的参数,对于始何创建对象(逻辑)不关心时候.由于将初始化实例放在了一个

设计模式(3)抽象工厂模式(Abstract Factory)

设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 源码地址 0 抽象工厂模式简介 0.0 抽象工厂模式定义 抽象工厂模式一般的书面定义为:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类 提供创建接口,无需指定具体实现类,这个原则在简单工厂模式和工厂方法模式篇已经反复讲到了,这是面向接口编程的一个基本准则,很显然,从抽象工厂模式的一般定义中可以看出这也是抽象工厂模式的一个核心,而抽象工厂模式的另

php设计模式总结-工厂模式

使用工厂模式的目的或目标? 工厂模式的最大优点在于创建对象上面,就是把创建对象的过程封装起来,这样随时可以产生一个新的对象.减少代码进行复制粘帖,耦合关系重,牵一发动其他部分代码. 通俗的说,以前创建一个对象要使用new,现在把这个过程封装起来了.假设不使用工厂模式:那么很多地方调用类a,代码就会这样子创建一个实例:new a(),假设某天需要把a类的名称修改,意味着很多调用的代码都要修改. 工厂模式的优点就在创建对象上.工厂模式的优点就在创建对象上.建立一个工厂(一个函数或一个类方法)来制造新

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

1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂的生活场景,卖早点的小摊贩,他给你提供包子,馒头,地沟油烙的煎饼等,小贩是一个工厂,它生产包子,馒头,地沟油烙的煎饼.该场景对应的UML图如下所示: 图1:简单工厂模式UML图 简单工厂模式的参与者: 工厂(Factory)角色:接受客户端的请求,通过请求负责创建相应的产品对象. 抽象产品(Abstract Product)角色: 是工厂模式所创建对象的父类或是共同拥有的接口.可是抽象类或接口. 具体产品(Conc