工厂模式
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。如果对象的初始化的过程很长很复杂,放在构造器中是很危险的,就像很多鸡蛋放到一个篮子里。所以要把对象的创建过程抽象独立出来。工厂模式定义了一个创建对象的接口,但由于子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到了子类。
工厂模式分类
1. 简单工厂模式(Simple Factory)
2. 工厂方法模式(Factory Method)
3. 抽象工厂模式(Abstract Factory)
这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。
什么时候使用工厂模式:
1.在编码时不能预见需要创建哪种类的实例。
2.系统不应依赖于产品类实例如何被创建、组合和表达的细节
简单工厂模式
顾名思义,这个模式本身很简单,而且使用在业务较简单的情况下。
它由三种角色组成(关系见下面的类图):
1、工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2、抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3、具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
简单实例:
//抽象产品角色
public interface Car{
public void drive();
}
//具体产品角色
public class Benz implements Car{
public void drive() {
System.out.println("Driving Benz ");
}
}
//工厂方法
//注意 返回类型为抽象产品角色
public static Car driverCar(String s)throws Exception {
//判断逻辑,返回具体的产品角色给Client
if(s.equalsIgnoreCase("Benz")) return new Benz();
else if(s.equalsIgnoreCase("Bmw"))
return new Bmw();
......
else throw new Exception();
。。。
工厂方法模式
定义了一个创建对象的接口,但由子类决定,要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。
1、工厂角色:这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。2、具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。3、抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。4、具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
//抽象工厂角色
public interface Driver{
public Car driverCar();
}
public class BenzDriver implements Driver{
public Car driverCar(){
return new Benz();
}
}
public class BmwDriver implements Driver{
public Car driverCar() {
return new Bmw();
}
}
......//应该和具体产品形成对应关系,这里略...
public class Magnate
{
public static void main(String[] args)
{
try{
Driver driver = new BenzDriver();
Car car = driver.driverCar();
car.drive();
}catch(Exception e)
{ }
}
}
工厂方法使用一个抽象工厂角色作为核心来代替在简单工厂模式中使用具体类作为核心。简单工厂和工厂方法都提高了代码的可维护性可扩展性
抽象工厂模式
给客户端提供一个接口,可以创建多个产品族中的产品对象。而不需要明确指定具体类。
而且使用抽象工厂模式还要满足以下条件:
1.系统中有多个产品族,而系统一次只可能消费其中一族产品
2.同属于同一个产品族的产品一起使用时。
来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):
抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
public abstract class Factory{
public abstract Sample creator();
public abstract Sample2 creator(String name);
}
public class SimpleFactory extends Factory{
public Sample creator(){
.........
return new SampleA
}
public Sample2 creator(String name)
{
.........
return new Sample2A
}
}
public class BombFactory extends Factory{
public Sample creator(){
......
return new SampleB
}
public Sample2 creator(String name){
......
return new Sample2B
}
}
工厂模式和抽象工厂模式的区别:
他们都叫工厂,都生成产品,都是接口型设计模式。
工厂方法用的是继承,二抽象工厂用的是对象的组合,工厂方法通过子类来创造对象,负责将客户从具体类型中解耦,抽象工厂提供了用来创建一个产品家族的抽象类型,要使用这个工厂必须先实例化他,然后将它传入一些针对抽象类型所写的代码,把客户从所有的实体产品中解耦。但是,加入新产品必须改变接口。抽象工厂使用工厂方法来实现具体工厂。
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。工厂方法采用的是类继承机制(生成一个子类,重写该工厂方法,在该方法中生产一个对象)。而抽象工厂采用的是对象组合机制,专门定义“工厂”对象来负责对象的创建。对象组合的方式就是把“工厂”对象作为参数传递 。
有个解释我觉得特别有意思:抽象工厂模式就是ioc之后的工厂模式 ,也就是说抽象工厂模式就是在工厂模式的基础上添加了spring框架 ,具体就是这个意思,抽象工厂模式是让工厂和依赖工厂的子类全部依赖一个接口或者抽象类,因为抽象代表着稳定,这样可以很容易的遵循oo中比较著名的开放关闭原则,设计出来的系统、框架或者程序很富有弹性和扩展能力
说明以下总结主要引用自博客:http://www.cnblogs.com/poissonnotes/archive/2010/12/01/1893871.html
- 大小: 14.1 KB
- 大小: 16.6 KB
- 大小: 23.1 KB
分享到:
相关推荐
JAVA设计模式(01):创建型-工厂模式【简单工厂模式】(Simple Factory)
JAVA-设计模式-创建型模式-工厂模式
java 创建型模式--工厂模式(Factory Pattern)示范代码demo,关于工厂模式可以查看我的博客 http://blog.csdn.net/u012930316/article/details/54599580
创建型设计模式---工厂设计模式实现
创建型设计模式----抽象工厂模式
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
c++设计模式-创建型模式-工厂方法模式-最简单的源码-qt工程
设计模式--抽象工厂模式实现多数据库连接 设计模式,.net设计模式,抽象工厂
最新设计模式超级详解课程,课程深入浅出的探讨了设计模式总览,创建型模式、结构型模式、行为模式的...├─day01-总览设计模式-06-创建型模式-工厂-简单工厂模式.mp4 ├─day01-总览设计模式-07-创建型模式-工厂-工厂
part4-创建型-工厂模式.ppt part5-创建型-生成器模式.ppt part6-结构型设计模式-适配器模式.ppt part8-结构型设计模式-代理模式.pptx part9-结构型设计模式-外观模式.pptx part1O-补充内容-XML文件的操作.pptx part...
设计模式_创建型_工厂方法模式
简单工厂模式(不属于23种设计模式范围之内) 用意:一个工厂生产所有产品
工厂模式(Factory Pattern)作为创建型模式的一种,通过提供一个统一的接口来创建对象,封装对象的创建逻辑,提高代码的灵活性和可维护性。
Factory Method 工厂方法模式(创建型模式).wmv
介绍了三种创建型设计模式:简单工厂模式、工厂方法模式、抽象工厂模式;
c++设计模式-创建型-抽象工厂方法-最简单源码-qt工程
C++设计模式-创建型模式-简单工厂模式源码
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂...
本例是一个抽象工厂的实例程序,纯粹的个人完全原创,里面有完整的注释及说明。非常适合于新手及对设计模式有困惑的。实例简单但清晰的阐述了抽象工厂模式的妙处。
设计模式之我见(1):设计模式概述 (100%) 设计模式面面观(2):设计模式基本要素与原则 (100%) 设计模式面面观(3):单件模式(Singletion)-创建型模式 (100%) 设计模式面面观(4):工厂模式...