通过学习,一句话概括Java工厂模式的特点——通过建立一个工厂来创建对象,不必关心构造对象实例能不能被实例化啊等诸多细节和复杂过程。

工厂模式呢?就像我们从劳动密集型社会转型到技术密集型社会。打个比方,从前要制造一个桌子,从上山选木头、砍木头、运木头,到设计桌子,制造桌子等细节问题都需要一个人去做好,由于付出的劳动成本极高和技术学成的时间等问题,一般一个木匠在创新方面有一定的局限性。后来,人们步入了工业时代,制造业的发展突飞猛进,另外,倡导分工细化。比如,电脑的制造厂商,它懂得怎样装好一部电脑和谁的零部件做的好,这个电脑厂商不必知道每个零部件的制作细节,但是,一样可以制造出来性能优越(算是一种取最优吧)的电脑。

一、工厂模式

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

二、工厂模式分为三类

1.简单工厂模式(Simple Factory)

2.工厂方法模式(Factory Method)

3.抽象工厂模式(Abstract Factory)

这三种模式从上到下逐步抽象,并且更具一般性。

工厂方法模式:

一个抽象产品类,可以派生出多个具体产品类;  一个抽象工厂类,可以派生出多个具体工厂类;每个具体工厂类只能创建一个具体产品类的实例。

抽象工厂模式:

多个抽象产品类,每个抽象产品类可以派生出多个具体产品类;一个抽象工厂类,可以派生出多个具体工厂类;每个具体工厂类可以创建多个具体产品类的实例。

三、简单工厂模式 
建立一个工厂(一个函数或一个类方法)来制造新的对象。

代码实例:

 public class Dog {
private String name;
private String address; void shout() {
System.out.println("汪汪汪~~");
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
}
} class DogFactory {
static public Dog getDog() {
// return new Dog();
Dog dog = new Dog();
dog.setAddress("浙江杭州");
dog.setName("M.zhou");
return dog;
}
} class Test2 {
public static void main(String[] args) {
Dog dog = DogFactory.getDog();
Dog dog2 = DogFactory.getDog();
Dog dog3 = DogFactory.getDog(); System.out.println(dog == dog2); // false
}
}

四、工厂方法模式

工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。

工厂方法模式组成:

1.抽象工厂角色:

工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。

2.具体工厂角色:

它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。

3.抽象产品角色:

它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。

4.具体产品角色:

具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

工厂方法模式使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的“上帝类”。这样便分担了对象承受的压力;而且这样使得结构变得灵活 起来,前面学习过面向对象的三大特性,继承、封装和多态,工厂模式是将这三大特性集合起来的应用,同时工厂角色的结构也是符合开闭原则的。

下面举个例子:

/*
* @author M.zhou
* @date 2017-7-1 下午 18:59
* version 1.0
*
*/ //创建电脑制造工厂
public interface MyFactory {
public MyBattery createBattery(); // 定义创建电池 public MyDisplay createDisplay(); // 定义创建显示器 public MyMotherBoard createMotherBorad(); // 定义创建主板 public MyShell createShell(); // 定义创建外壳
}
//创建电脑原材料工厂,负责提供电池、显示屏、主板和外壳
public class ComFactory implements MyFactory { @Override
public <MyBattery> MyBattery createBattery() {
// TODO Auto-generated method stub
return new SuperBattery;
} @Override
public MyDisplay createDisplay() {
// TODO Auto-generated method stub
return new SuperDisplay;
} @Override
public MyMotherBoard createMotherBorad() {
// TODO Auto-generated method stub
return new SuperMotherBoard;
} @Override
public MyShell createShell() {
// TODO Auto-generated method stub
return new SuperShell;
}
}
//創建电脑装配厂的接口,只负责从原材料那里获取材料并配置成新型电脑。其他的它一概不管
public interface ComAssemblyPlant {
public Computer Assembley(); }
//新型电脑装配厂(可以根据市场需求,更换、升级零件,制造新型电脑)
public class NewComputerFactory implements ComAssemblyPlant {
MyFactory materialFactory; // 原料工厂 @Override public Computer Assembley() {
Computer computer=new Computer(); computer.setBattery(materialFactory.createBattery());
computer.setDisplay(materialFactory.createDisplay());
computer.setMotherBoard(materialFactory.createMotherBorad());
computer.setShell(materialFactory.createShell());
return computer; } }

Java基础——工厂模式的更多相关文章

  1. JAVA基础--工厂模式

    interface Fruit{ // 定义一个水果接口 public void eat() ; // 吃水果 } class Apple implements Fruit{ public void ...

  2. !!转!!java 简单工厂模式

    举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就是 ...

  3. 一张图搞定Java设计模式——工厂模式! 就问你要不要学!

    小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...

  4. Java抽象工厂模式

    Java抽象工厂模式 基本定义 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象 ...

  5. Java的工厂模式(一)

    Java的工厂模式在框架中是用的到很多的,所谓的工厂模式,其实也就是用一个接口来创建对象,把实例化的工作推迟到子类去实现.这样在主函数中就可以直接创建一个工厂类,再通过这个工厂类实现操作. 假设有一个 ...

  6. Java简单工厂模式

    Java简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简 ...

  7. Java 静态工厂模式的使用

    多相关文章请参考:http://www.enjoytoday.cn/categorys/java 静态工厂模式给人的第一印象就是:static+abstract.这两个词汇已经说明了一切,一个是周期长 ...

  8. 【设计模式】Java设计模式 -工厂模式

    [设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...

  9. 从基础知识到重写Spring的Bean工厂中学习java的工厂模式

    1.静态工厂模式其他对象不能直接通过new得到某个类,而是通过调用getInstance()方法得到该类的对象这样,就可以控制类的产生过程.顺带提一下单例模式和多例模式:  单例模式是指控制其他对象获 ...

随机推荐

  1. Loop List

    Loop List is very common in interview. This article we give a more strict short statement about its ...

  2. Angular2入门体验

    好的工具往往使得开发应用更快更简单,而不是任何模块都手动开发.angualr cli就是一个支持 创建工程,添加文件,对各种任务如测试.打包.部署等迭代. 本文的目的就是基于TypeScript开发构 ...

  3. centos docker 安装笔记

    安装epel rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm rpm --import ...

  4. 基于Django+celery二次开发动态配置定时任务 ( 一 )

    需求: 前端时间由于开发新上线一大批系统,上完之后没有配套的报表系统.监控,于是乎开发.测试.产品.运营.业务部.财务等等各个部门就跟那饥渴的饿狼一样需要 各种各样的系统数据满足他们.刚开始一天一个还 ...

  5. POJ 2726

    #include <iostream> #include <algorithm> #define MAXN 10005 using namespace std; struct ...

  6. android(java) 开发过程中经验及总结记录

    android(java) 开发过程中经验及总结记录

  7. MATLAB下数组随机打乱顺序的方法

    一:问题 有两个规模相同的数组,两个数组相同位置的元素一一对应,现在要将两数组的元素同时打乱顺序,并且乱序后的两数组对应位置元素要保持乱序前的对应关系. 二:方法  采用randperm()函数,产生 ...

  8. 多态、抽象类、接口_DAY09

    1:多态(掌握) (1)多态概念:一种事物的多种形态 (2)体现:父类的引用指向其子类的实例对象;接口的引用指向其实现类的实例对象 (3)特点: 成员方法:编译看左边,运行看右边 运行:子类重写的方法 ...

  9. String、StringBuffer与StringBuilder之间区别 (转载)

    最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下. 关于这三个类在字符串处理中的位置不言而喻,那 ...

  10. 剑指offer一之二维数组中的查找

    一.题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 二.解答方法: 方法 ...