工厂设计模式

工厂设计模式(factory)

在面向对象的编程过程中,需要不断的创建对象,当创建对象的过程中过于复杂,并且创建对象又相对独立的时候我们就需要工厂模式来封装创建对象的过程。而我们在使用对象的时候不用必须了解该对象产生的过程。

在没有工厂模式之前,我们基本上就是随用随new。后来出现了一个管理者,管理对象的生产,在需要使用对象的时候直接去管理者那里去拿就ok了,这个管理着就是工厂类。工厂模式分为三种

1.简单工厂模式

顾名思义就是乞丐版工厂模式,非常简单呗。

publicclassXiaoMing{

publicvoidsay(){

System.out.println("大家好,我是小明");

}

}

publicclassLiHua{

publicvoidsay(){

System.out.println("大家好,我是李华");

}

}

/**

* 工厂类

* @author Administrator

*

*/

publicclassObjectFactory{

publicstaticXiaoMinggetXiaoMingNewInstance(){

returnnewXiaoMing();

}

publicstaticLiHuagetLiHuaNewInstance(){

returnnewLiHua();

}

}

publicstaticvoidmain(String[]args){

System.out.println("我需要一个小明");

ObjectFactory.getXiaoMingNewInstance().say();

}

2.工厂方法模式

简单工厂模式的弊端,假如我有n+1个类需要工厂生产,则工厂类里面就要有n+1个工厂生产的逻辑代码,针对于工厂类也不符合开闭原则(对于修改关闭,对扩展开放),假如我们新增一个类就要修改工厂类代码。工厂方法模式的出现解决了该问题。

与简单工厂的区别,简单工厂模式只有一个工厂,工厂方法模式对每一个产品都有相应的工厂。

把工厂抽象话,工厂生产的的对象有子类控制。

1.抽象工厂类(规定创建的动作)

2.为每个业务类创建一个工厂类的子类(规定创建单个对象的具体实现)

packageMethodFactory;

publicabstractclassFactory{

publicabstractEntitycreadeObject();

}

packageMethodFactory;

publicclassFactoryImplLiHuaextendsFactory{

@Override

publicLiHuacreadeObject(){

returnnewLiHua();

}

}

packageMethodFactory;

publicclassFactoryImplXiaoMingextendsFactory{

publicXiaoMingcreadeObject(){

returnnewXiaoMing();

}

}

packageMethodFactory;

publicinterfaceEntity{

voidsay();

}

packageMethodFactory;

publicclassLiHuaimplementsEntity{

publicvoidsay(){

System.out.println("大家好,我是李华");

}

}

packageMethodFactory;

publicclassXiaoMingimplementsEntity{

publicvoidsay(){

System.out.println("大家好,我是小明");

}

}

packageMethodFactory;

publicclassText{

publicstaticvoidmain(String[]args){

System.out.println("麻烦给创建一个李华");

Factoryfactory=newFactoryImplLiHua();

Entityentity=factory.creadeObject();

entity.say();

}

}

该方式解决了增加新的业务类时修改工厂类的弊端

3.抽象工厂方法模式

用于当业务类之间存在关联的是,同时创建两个相对应的业务类对象。

抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象

假设在北京西城有一户人家有两个孩子,李华和李四。东城有一户人家有两个孩子,小明和张三,现在张三和李四要结婚,李华和小明结婚,需要找两个婚庆公司。代码设计如下:

西城人家抽象类:

packageabsFactory;

publicinterfaceXiChengEntity{

voidsay();

}

两个孩子:

packageabsFactory;

publicclassLiHuaimplementsXiChengEntity{

publicvoidsay(){

System.out.println("大家好,我是李华");

}

}

packageabsFactory;

publicclassLiSiimplementsXiChengEntity{

@Override

publicvoidsay(){

// TODO Auto-generated method stub

System.out.println("大家好,我是李四");

}

}

东城人家抽象类:

packageabsFactory;

publicinterfaceDcChengEntity{

voidsay();

}

两个孩子:

packageabsFactory;

publicclassXiaoMingimplementsDcChengEntity{

publicvoidsay(){

System.out.println("大家好,我是小明");

}

}

packageabsFactory;

publicclassZhangSanimplementsDcChengEntity{

@Override

publicvoidsay(){

// TODO Auto-generated method stub

System.out.println("大家好,我是张三");

}

}

婚庆公司(工厂类)

packageabsFactory;

/**

* 婚庆公司 抽象工厂类

* @author Administrator

*

*/

publicabstractclassFactoryAbs{

abstractXiChengEntitycreadObjectXi();

abstractDcChengEntitycreadObjectDc();

}

小明与李华的婚庆公司:

packageabsFactory;

/**

* 李华与小明的婚庆公司

* @author Administrator

*

*/

publicclassFactoryAbsImplLXextendsFactoryAbs{

@Override

XiChengEntitycreadObjectXi(){

returnnewLiHua();

}

@Override

DcChengEntitycreadObjectDc(){

returnnewXiaoMing();

}

}

张三与李四的婚庆公司:

packageabsFactory;

/**

* 张三与李四的婚庆公司

* @author Administrator

*

*/

publicclassFactoryAbsImplLZextendsFactoryAbs{

@Override

XiChengEntitycreadObjectXi(){

returnnewLiSi();

}

@Override

DcChengEntitycreadObjectDc(){

returnnewZhangSan();

}

}

婚礼现场:

packageabsFactory;

publicclassText{

publicstaticvoidmain(String[]args){

System.out.println("李四与张三结婚了,新人出厂!");

FactoryAbsfactory=newFactoryAbsImplLZ();

factory.creadObjectDc().say();;

factory.creadObjectXi().say();;

System.out.println("李华与小米结婚了,新人出厂!");

FactoryAbsfactory2=newFactoryAbsImplLX();

factory2.creadObjectDc().say();;

factory2.creadObjectXi().say();;

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,806评论 18 399
  • 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...
    RamboLI阅读 778评论 0 1
  • 原文链接:http://blog.csdn.net/zhangerqing http://www.cnblogs....
    孤独杂货铺阅读 1,539评论 0 3
  • 朦朦胧胧中 你来了 黑黄的灰发 伴着曾日迷样微笑 握着你的手的五指 浪荡灰白坊间 你说 斜着还是齐着 我说 都好看...
    合神sooning阅读 261评论 2 1
  • 从古至今,家在我们国人的心中都占据着很重的分量。随着生活品质的提升,消费者对于家装品质的要求也不断趋严,个性舒适两...
    码满家阅读 166评论 0 0