工厂模式

工厂模式(创建型模式):创建对象接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建延伸到子类进行
主要解决接口选择问题,明确计划不同条件下执行创建不同实例
通过子类实现工厂实例,创建过程在其子类执行
优点:提高扩展性,屏蔽产品具体实现,调用者只关心产品接口;
缺点:增加一个产品,会导致系统中类个数增加,造成系统复杂度
使用场景:

     1.日志记录:用户选择将日志记录到磁盘/系统事件/远程服务器2.数据库访问:系统采用不同的数据库3.设计连接服务器的框架, 比如针对pop3, imap, http设计接口
注:工厂模式作为类的创建模式, 复杂的对象使用工厂模式, 简单对象使用new, 而非工厂模式

简单工厂:一个工厂类,一个产品抽象类
工厂方法:多个工厂类,一个产品抽象类
抽象工厂:多个工厂类,多个产品抽象类

个人思考:

采用松耦合,多态的方式,使得我想要哪一个功能,就生成相应对象
问题的考虑方向只需放在要实例化哪个类,要增加哪一项功能也可以使用枚举的方式
实现工厂模式: 将每个工厂实例作为枚举对象,通过枚举工厂进行调用

抽象工厂

抽象工厂模式(创建型模式,其他工厂的工厂):
接口只负责创建一个相关的对象的工厂,不需要显式指定类,工厂模式就能按照工厂模式提供对象(多态)
用于解决接口选择问题
优点:当产品族中,多个对象被设计成一起工作,能保证客户端只使用一个产品族中对象
缺点:产品族中扩展产品,需要在抽象类中添加代码, 还需要在具体实现里面添加代码
个人思考:

     1. 懂得一点,使用设计模式, 先搞定UML2. 建立多个工厂, 然后建立一个总的工厂,通过总的工厂调用下属工厂3. 主要还是多态的性质运用, 程序中还有很多瑕疵4. 主要还是接口的选择, 以及状态的变化

下面给出例子说明抽象工厂与工厂模式:

package com.AbstractFactory;
/*** 懂得一点,使用设计模式, 先搞定UML* 建立多个工厂, 然后建立一个总的工厂,通过总的工厂调用下属,* 主要还是多态的性质运用, 程序中还有很多瑕疵* 主要还是接口的选择, 以及状态的变化* @author regotto**/
public class AbstractFactoryDemo1 {public static void main(String[] args) {// 获得图像工厂AbstractFactoryShapeColor shapefactory=FactoryProducer1.getFactory("Shape");// 根据目标图像绘制对应的图案shapefactory.getShape("Rectangle").draw();// 获得颜色工厂AbstractFactoryShapeColor colorfactory=FactoryProducer1.getFactory("Color");//根据需要的颜色给对应的图像做颜色填充colorfactory.getColor("Red").fill();;}}//使用工厂
class FactoryProducer1{public static AbstractFactoryShapeColor getFactory(String FactoryType) {if(FactoryType==null) return null;else if(FactoryType.equals("Shape"))return new ShapeFactory();else if(FactoryType.equals("Color"))return new ColorFactory();else return null;}
}//抽象工厂
abstract class AbstractFactoryShapeColor{public abstract Shape getShape(String shapeType);public abstract Color getColor(String colorType);
}//Shape工厂
class ShapeFactory extends AbstractFactoryShapeColor{public Shape getShape(String shapeType) {if(shapeType==null)return null;if(shapeType.equals("Rectangle"))return new Rectangle();else if(shapeType.equals("Square"))return new Square();else if(shapeType.equals("Circle"))return new Circle();else return null;}@Overridepublic Color getColor(String colorType) {// TODO Auto-generated method stubreturn null;}
}//Color工厂
class ColorFactory extends AbstractFactoryShapeColor{public Shape getShape(String shapeType) {if(shapeType==null)return null;if(shapeType.equals("Rectangle"))return new Rectangle();else if(shapeType.equals("Square"))return new Square();else if(shapeType.equals("Circle"))return new Circle();else return null;}@Overridepublic Color getColor(String colorType) {if(colorType==null)return null;if(colorType.equals("Red"))return new Red();else if(colorType.equals("Bule"))return new Blue();else if(colorType.equals("Green"))return new Green();else return null;}
}//Shape属性
interface Shape{void draw();
}
class Rectangle implements Shape{public void draw() {System.out.println("Rectangle"); }
}
class Square implements Shape{public void draw() {System.out.println("Square");   }
}
class Circle implements Shape{public void draw() {System.out.println("Circle");   }
}//Color属性
interface Color{void fill();
}
class Red implements Color{public void fill() {System.out.println("Red");}
}
class Blue implements Color{public void fill() {System.out.println("Blue");}
}
class Green implements Color{public void fill() {System.out.println("Green");}
}

代码中分别建立了两个工厂—color以及shape, 实现顶级抽象父类AbstractFactoryShapeColor, 最后新建一个实体工厂分别获得color以及shape两个工厂, 通过AbstractFactoryShapeColor的引用分别调用draw和fill方法对图像的绘制和颜色的填充
体现了多个工厂, 多个抽象产品, 获得抽象产品的方式延伸到子类中进行

设计模式_1_工厂模式与抽象工厂相关推荐

  1. Java设计模式(工厂模式>抽象工厂模式和原型模式)

    Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...

  2. 设计模式之工厂模式和抽象工厂

    设计模式分类 通常来说设计模式分为三大类: 创建型模式,共 5 种:工厂模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共 7 种:适配器模式.装饰器模式.代理模式.外观模式.桥接模 ...

  3. java工厂模式和抽象工厂_Java中的抽象工厂设计模式

    java工厂模式和抽象工厂 Welcome to Abstract Factory Design Pattern in java example. Abstract Factory design pa ...

  4. 设计模式之——简单(静态)工厂模式和抽象工厂模式

    文章目录 [关于设计模式] 设计模式的诞生 设计模式概念与解读 设计模式的原则 [关于工厂模式] 简单工厂(静态工厂)模式的概念 抽象工厂模式 工厂模式的使用时机和注意事项 给自己的思考 [关于设计模 ...

  5. 设计模式理解:工厂模式,抽象工厂,原型方法

    工厂模式.抽象工厂.原型方法都是对象创建型模式.工厂模式的目的是利用抽象类去动态地创建对象:抽象工厂模式是利用抽象类动态地创建一系列的对象:而原型方法是通过克隆(深拷贝)地形式创建出对象 ,再去操作新 ...

  6. 【软件设计模式】工厂模式(简单工厂模式、一般工厂模式、抽象工厂模式)

    概述: 工厂模式把对象的创建交由某个特定的类来实现,该类为工厂类,该类的方法称为工厂方法,仅仅负责创建对象,从而将客户端复杂的对象创建语句实现解耦.责任分离,方便扩展和维护. 分类: 工厂模式分为简单 ...

  7. GOLANG工厂模式、简单工厂模式、抽象工厂模式、创建者模式

    设计模式可以大大提高代码复用性,使得程序的修改更加灵活.另外将各个功能模块抽象解耦出来,在某个模块需要更改时不至于会对整体代码进行修改,解耦的好的话只简单修改几个地方即可以切换某个模块在实现上的切换, ...

  8. JAVA工厂模式优缺点_简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

    各位小伙伴好,今天给大家主要介绍一下简单工厂模式.工厂模式和抽象工厂模式的区别及各自的优缺点. (本文实现语言为Python3) [前言] 众所周知今天所讲的内容是 设计模式的一类:对于设计模式这个概 ...

  9. 简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

    各位小伙伴好,今天给大家主要介绍一下简单工厂模式.工厂模式和抽象工厂模式的区别及各自的优缺点. (本文实现语言为Python3) [前言] 众所周知今天所讲的内容是设计模式的一类:对于设计模式这个概念 ...

  10. php之工厂模式和抽象工厂

    最近在看工厂模式和抽象工厂模式,把深入php那本书的这一块看了两遍,可还是迷迷糊糊的,于是去问了度娘,我觉得有篇博文里这么说的很有道理: 工厂方法 工厂方法是针对每一种产品提供一个工厂类.通过不同的工 ...

最新文章

  1. 多种分布式文件系统简介
  2. Chrome反压缩JS代码:Pretty Print显示可读代码
  3. 数据库ORA-03113排查
  4. modbus 台达a2_驱控智造未来 台达重磅发布多款工业自动化新品
  5. IPC 进程间通信方式——管道
  6. Java Web学习总结(23)——Distributed Configuration Management Platform(分布式配置管理平台)
  7. Zookeeper启动和Leader选举机制
  8. LINUX下查看CPU使用率的命令[Z]
  9. 51nod 1134最长递增子序列
  10. 调用平安银行接口返回GBK乱码问题
  11. 【路由器】OpenWrt 手动编译 ipk
  12. 支付宝统一收单接口实现支付宝支付
  13. opencv-python文字识别
  14. 我的第一堂职业素质课
  15. scrapy爬取实习僧全站
  16. 考研英语作文—谋篇布局
  17. 插件目标[置顶] Maven自定义绑定
  18. 计算机二三四级软考、志愿者实习、软著外观实用发明专利、著作、科研论文EI/SCI在大学期间野蛮成长方式
  19. Python实现随机游走详细解释
  20. Maven项目依赖外部jar进行打包的两种方式

热门文章

  1. springboot集成环信sdk报错
  2. 学成在线--16.添加课程计划
  3. android gravity参数,Gravity - [ Android中文手册 ] - 在线原生手册 - php中文网
  4. 表格列求和_excel表格制作,Excel表格的基本操作,包含制作一个表格10方面的知识...
  5. 进制转换中dbho是什么意思_什么是网段?二进制十进制如何互相转换?看完这篇,你就全明白了...
  6. SCL定时 1500_iPhone12开售当天黄牛加价1500,哪里买最划算?
  7. 使用2to3.py 转换 python2.x 代码 到python3
  8. QT串口编程的相关类(QSerialPortInfo)
  9. C++ Vector 使用心得
  10. 怎么用计算机画正弦函数图像,几何画板如何绘制正弦函数图象