java设计模式-工厂模式

原创 2016年08月28日 18:32:07

工厂模式概念

   之前写过简单工厂模式(也称静态工厂模式),但是它不属于23中设计模式之一,并且它也违背了“开闭原则”,因此就有了它的升级版工厂模式,它也是属于创建型模式,维基百科上对它的定义是这样的:工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。”并且它不像简单工厂模式那样,所有对象实例的创建都交给一个大工厂去完成(导致对单一职责的违背),工厂模式是将工厂职责单一化,每个工厂只针对一个对象创建,因此当要新增新的对象时,只需要增加对象类和与之对应的工厂类就可以,不必去修改原有的代码。


工厂模式类图

这里写图片描述
衣服的款式有儿童、青年、中年等,它们都有各自的制造工厂来制造它们
说明:
1. InstanceFactory代表创建对象实例工厂接口
2. ChildrenClothesFactory、YouthClothesFactory、MiddleAgeClothesFactory是具体的工厂类,实现InstanceFactory接口
3. Clothes是衣服接口
4. ChildrenClothes、YouthClothes、MiddleAgeClothes是具体款式衣服,现实Clothes接口


工厂模式实现

主体代码如下:

public interface InstanceFactory {
    public Clothes createInstance();
}
public class ChildrenClothesFactory implements InstanceFactory{
    @Override
    public Clothes createInstance() {
        return new ChildrenClothes();
    }
}
public 
class YouthClothesFactory implements InstanceFactory{
    @Override
    public Clothes createInstance() {
        return new YouthClothes();
    }
}
public class MiddleAgeClothesFactory implements InstanceFactory{
    @Override
    public Clothes createInstance() {
        return new MiddleAgeClothes();
    }
}
public interface Clothes{
    public void applyFor();
}
public class ChildrenClothes implements Clothes{

    @Override
    public void applyFor() {
        System.out.println("儿童穿的衣服");
    }
}
public class YouthClothes implements Clothes{

    @Override
    public void applyFor() {
        System.out.println("青年穿的衣服");
    }
}
public class MiddleAgeClothes implements Clothes{
    @Override
    public void applyFor() {
        System.out.println("中年穿的衣服");
    }
}

测试类代码:

public class DesignPatternTest {
    @Test
    public void factoryPatternTest(){
        InstanceFactory childrenClothesFactory = new ChildrenClothesFactory();
        Clothes childrenClosthes = childrenClothesFactory.createInstance();
        childrenClosthes.applyFor();

        InstanceFactory youthClothesFactory = new YouthClothesFactory();
        Clothes youthClosthes = youthClothesFactory.createInstance();
        youthClosthes.applyFor();

        InstanceFactory middleAgeClothesFactory = new MiddleAgeClothesFactory();
        Clothes middleAgeClosthes = middleAgeClothesFactory.createInstance();
        middleAgeClosthes.applyFor();
    }

}

输出如下:
这里写图片描述


工厂模式优缺点

  • 优点:相对简单工厂来说,遵循了“开闭原则”和“单一职责”。对客户端隐藏了对象实例化细节,客户端只需要告诉它们的需求,具体的实例化工作由对应的工厂来执行,和客户端需求不相干的工厂毫无关系。并且当需要在增加一种老年款式时,只需要增加对应的类和工厂即可,不必修改原有代码。
  • 缺点:代码的增加是成对增长的

                                                               -_-没有天才,只有勤奋的天才
    
版权声明:本文为博主原创文章,未经博主允许不得转载。

j2ee常用的设计模式?说明工厂模式

Java中的23种设计模式:Factory(工厂模式),Builder(建造模式),Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式),F...
  • v_fei
  • v_fei
  • 2007年11月28日 09:36
  • 1308

设计模式_改进策略模式_策略模式与简单工厂模式结合(Java)

上一篇我们介绍了《设计模式_策略模式(Java)》,同时讲述了策略模式与状态模式的区别,如果仔细查看代码或者类图,我们会发现策略模式在一定程度上是存在缺陷的,Client(Test类)必须知道所有的策...
  • tb3039450
  • tb3039450
  • 2016年09月22日 20:00
  • 1053

设计模式(一) 工厂模式 五种写法总结

转载请标明出处: http://blog.csdn.net/zxt0601/article/details/52703280本文出自:【张旭童的博客】系列开篇瞎BB设计模式相关的文章学习与总结,一...
  • zxt0601
  • zxt0601
  • 2016年10月12日 16:47
  • 13466

23种设计模式—之简单工厂模式

简单工厂模式(SimpleFactory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实...
  • JavaWebRookie
  • JavaWebRookie
  • 2015年11月06日 13:46
  • 2257

java设计模式学习笔记之计算器中的简单工厂模式

java设计模式学习笔记之计算器中的简单工厂模式 最近在重温设计模式,偶然看到程杰的《大话设计模式》写的非常不错、通俗易懂,之后的一系列都是学习的笔记,仅此记录。 一、情景回放:某校大二软件工程专...
  • qq137722697
  • qq137722697
  • 2016年11月30日 21:56
  • 2267

Java技术_每天掌握一种设计模式(003)_使用场景及简单实例(创建型:工厂方法)

模式描述 提供一个用于创建对象的接口(工厂接口),让其实现类(工厂实现类)决定实例化哪一个类(产品类),并且由该实现类创建对应类的实例。 2.模式作用 可以一定程度上解耦,消费者和产品实现类隔离开...
  • ooppookid
  • ooppookid
  • 2015年01月13日 15:09
  • 3369

设计模式——工厂方法 Java源代码

本程序改编自《Head First Design Patterns》中的Pizza例子,我本学期早上经常吃包子。总共有11个类:...
  • u013390476
  • u013390476
  • 2015年12月22日 12:52
  • 3421

每天一整理-java设计模式之工厂模式模式

工厂模式是我们很常用的一个模式,在ssh框架和ssm框架中都普遍使用到的工厂模式 工厂模式的定义一个用于创建对象的接口,让子类决定实例化哪个类 在这里我主要讲通过反射机制来决定生成类的工厂实现方法...
  • soybeen
  • soybeen
  • 2017年05月01日 09:26
  • 327

Java设计模式之三种工厂模式 -- 总是忘记,这次把你记下来!

简单工厂模式 理解 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。 不修改代码的话,是无法扩展的。   例子 产品接口 //产品接...
  • small_june
  • small_june
  • 2017年09月27日 13:00
  • 204

Java 中常用的设计模式?说明工厂模式?

Java 中的 23 种 设 计 模 式 :Factory( 工 厂 模 式 ),Builder( 建 造 模 式 ),Factory Method(工厂方法模式),Prototype(原始模型模式...
  • uniquewonderq
  • uniquewonderq
  • 2015年06月10日 14:51
  • 985
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式-工厂模式
举报原因:
原因补充:

(最多只允许输入30个字)