A:

设计模式之Factory(简单工厂模式、工厂方法和抽象工厂)

了解反射:

Class.forName().newInstance();

1.简单工厂方法

角色:

具体工厂

抽象产品

具体产品

比喻:

一个产业结构单一,只专门一个产品领域的小工厂,如软件。

2工厂方法

角色:

抽象工厂:不做具体的工作,完成生产产品所必须的工作,如:申明产权

具体工厂

抽象产品

具体产品

比喻:

公司在发展,开始生产不同领域的产品,如软件和硬件。

3抽象工厂方法

角色:

产品族:不同领域产品的组合,譬如:计算机产品

抽象工厂

具体工厂

抽象产品

具体产品

比喻:

企业壮大,开始融合自己的产品,如经济性计算机、商业性计算机等等,其中每个具体工厂只生产自己产品族的产品。

下面是详细讲解和小例子:

注意理解上面的比喻,更有利于理解工厂模式(Factory)

1.Simple Factory

适用情况:

一般情况下,简单工厂使用于类的分类不太明显,类关系单一,种类不多,而且不经常更新的情况,当然,我也是初学者,不能考虑到方方面面,在前进中寻找吧!

优点:

方便创建多种对象,不易混淆,逻辑清晰。

缺点:

工厂类的工作会随着类种类的增加而加重。

例子代码(注:代码是没有实际意义的,没有运行的必要,可能存在语法错误):

小企业:生产电脑硬件CPU,如CPUa,CPUb,CPUc分别代表三个种类的CPU

public abstract class CPU{

}

public class CPUa extends CPU{

public void getInfo() {

System.out.println("CPUa");

}

}

public class CPUb extends CPU{

public void getInfo() {

System.out.println("CPUb");

}

}

public class CPUc extends CPU{

public void getInfo() {

System.out.println("CPUc");

}

}

具体的工厂类:

Public class CPUFactory {

Public static CPU produceCPU(Type t){   //一般只用于返回新对象,所以一般方法为static,便于使用,提高效率

If(t==a)

Return new CPUa();

If(t==b)

Return new CUPb();

If(t==c)

Rerurn new CPUc();

}

}

客户端使用情况:

Publci class Client {

Public static void main(Stirng args[]) {

CPUFarctioy.produce(a).getInfo();

}

2.抽象工厂模式

适用情况:

一般类的分类明显,继承关系清晰,类的种类繁多,将其归类后使用此模式。

优点:

减少了工厂类的负担,责任更清晰,每个具体工厂产出一类对象,方便扩展,便于增加新的类分支。

例子程序:

中型企业:

生产CPU和操作系统OS,例如:OSa.OSb,OSc代表不同种类。

public abstract class CPU{

}

public class CPUa extends CPU{

public void getInfo() {

System.out.println("CPUa");

}

}

public class CPUb extends CPU{

public void getInfo() {

System.out.println("CPUb");

}

}

public class CPUc extends CPU{

public void getInfo() {

System.out.println("CPUc");

}

}

public abstract class OS{

}

public class OSa extends OS{

public void getInfo() {

System.out.println("OSa");

}

}

public class OSb extends OS{

public void getInfo() {

System.out.println("OSb");

}

}

public class OSc extends OS{

public void getInfo() {

System.out.println("OSc");

}

}

抽象工厂:

Public interface MFactory {

Public Product produce()

{

Sys.out.pirntln("Made by MFactoty!"):

}

}

Public class MFactoryCPU {

Public CPU produce(Type t)

{

If(t==a)

Return new CPUa();

If(t==b)

Return new CUPb();

If(t==c)

Rerurn new CPUc();

}

}

Public class MFFactoryOS {

Public OS produce(Type t)

{

If(t==a)

Return new  OSa();

If(t==b)

Return new  OSb();

If(t==c)

Rerurn new OSc();

}

客户端:

Publci class Client {

Public static void main(Stirng args[]) {

NewMFactoryCPU().produce(a).getINfo();

newMFactoyrOS().produce(b).getInfo();

}

3.抽象工厂

适用情况:

类种类繁多,而且各个种类之间的类有不同的交互协作。

例子代码:

大企业,生产电脑COMP,种类分别为COMPa,COMPb,COMPc

CPU和OS的代码同上

抽象工厂:
public interface Factory{

ProduceCPU(Type);

ProduceOS(Type);

};

Public class Factorya{

//用于生成COMPa所需的a类配件OS和CPU

ProduceCPU(){

Reuturn new CPUa();

}

ProduceOS(){

Return new OSa);

}

}

Public class Factoryb{

//用于生成COMPa所需的b类配件OS和CPU

ProduceCPU(){

Reuturn new CPUb();

}

ProduceOS(){

Return new OSb();

}

}

Public class Factoryc{

//用于生成COMPa所需的a类配件OS和CPU

ProduceCPU(){

Reuturn new CPUc();

}

ProduceOS(){

Return new OSc();

}

}

应用端:

Publci class COMPFactory {

produceCOMP(Factory f) {

Return f.produceCPU()+f.produceOS();

}          //一定要注意参数是Factory

}

Publci class Client {

Public static void main(Stirng args[]) {

COMP computer = COMPFactory.produceCOMP(new Factorya);

}

就写到这里了,渴望大家的意见和批评!

Java设计模式之工厂模式相关推荐

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

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

  2. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

  3. java设计模式之工厂模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  4. Java设计模式之工厂模式篇 (转)

    Java设计模式之工厂模式篇 (转)[@more@]Java设计模式之工厂模式篇 作者:冯睿  本文选自:赛迪网 2003年03月07日 .NET.com.cn/servlets/ad?Pool=te ...

  5. Java设计模式之 工厂模式(简单工厂模式)

    前一阵子学习了Java 中据说是最简单的设计模式的 单例模式,想一起讨论学习的小伙伴请点击这里: Java 设计模式之单例模式 那么今天就把学习的工厂模式记录下来 工厂模式: 实现了创建者和调用者的分 ...

  6. Java设计模式之工厂模式 (工厂方法模式)

    上一篇我们学习了简单工厂模式,最后对于增加新产品的缺点,我们在工厂方法模式中解决. 为学习简单工厂模式的小伙伴点击这里Java 设计模式之工厂模式(简单工厂模式) 工厂方法模式要点: 避免简单工厂模式 ...

  7. 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)

    [JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...

  8. JAVA设计模式之工厂模式讲解

    目录 前言 开始表演 前言 Java中使用工厂模式的主要原因是为了实现代码的灵活性和可维护性.工厂模式是一种创建型设计模式,它提供了一种将对象的创建和使用进行分离的方式.具体来说,工厂模式可以将对象的 ...

  9. Java设计模式:工厂模式

    问题提出 Java的工厂模式与现实生活中的工厂的模型是很相似的.工厂是用来做什么?当然是用来生成产品.因此在Java的工厂模式的关键点就是如何描述好产品和工厂这2个角色之间的关系. 下面来仔细描述一下 ...

  10. java设计模式---抽象工厂模式

    工厂模式在项目中是常常用到的,有人说只有大项目才会用到,小项目是体会不出来.其实使用设计模式与项目的大小没有实质性的联系.设计模式是经验的总结而不是衡量项目大小的标准. 以开发项目的DAO层为例,在项 ...

最新文章

  1. 编写函数求两个整数 a 和 b 之间的较大值。要求不能使用if, while, switch, for, ?: 以 及任何的比较语句。...
  2. jenkins插件之Publish Over FTP
  3. 2016年8月份学习总结,读书《书都不会读,你还想成功》
  4. c 连接mysql后 怎么用_使用C语言连接mysql,并进行操作
  5. Java使用继承的语法是,Java使用继承
  6. java调用支付接口实例_Java 调用支付宝接口
  7. Zabbix监控Zookeeper健康状况
  8. Redis 6 RC1发布,带来众多新特性
  9. python中的translate_Python translate()方法
  10. 简易 Vue 构建--篇三
  11. libcurl学习及简易封装类
  12. iOS App图标和启动画面尺寸http://www.jianshu.com/p/adpKye
  13. VS2010与.NET4系列 10. VS2010代码智能感知增强
  14. php 股票历史api接口,新浪股票接口获取历史数据
  15. 宝宝起名和姓名打分源码(PHP和JAVA版)
  16. EXCEL,复制内容随时会卡死,经常发生
  17. 微信公众平台开发2-access_token获取及应用(含源码)
  18. Ashen的成长,从CSDN博客开始!
  19. UVa Problem 10001 Garden of Eden (伊甸园)
  20. SSLOJ·谷仓的安保【DFS】

热门文章

  1. 安装使用反编译工具ILSPY
  2. ros 开源物体检测_ROS kinetic + Realsens D435i + ORK + LINEMOD 物体识别
  3. 产品体系建模工具软件
  4. 组态软件专用短信终端
  5. 基于springboot小区物业管理系统
  6. tar和其他一些压缩解压工具
  7. Tortoise SVN 汉化(官网下载汉化包)
  8. Matlab遗传算法
  9. Windows不同压缩软件、压缩算法、压缩率详细对比测试与选择
  10. 基于大数据平台的城市规划设计