Java基础——工厂模式
通过学习,一句话概括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基础——工厂模式的更多相关文章
- JAVA基础--工厂模式
interface Fruit{ // 定义一个水果接口 public void eat() ; // 吃水果 } class Apple implements Fruit{ public void ...
- !!转!!java 简单工厂模式
举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就是 ...
- 一张图搞定Java设计模式——工厂模式! 就问你要不要学!
小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...
- Java抽象工厂模式
Java抽象工厂模式 基本定义 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象 ...
- Java的工厂模式(一)
Java的工厂模式在框架中是用的到很多的,所谓的工厂模式,其实也就是用一个接口来创建对象,把实例化的工作推迟到子类去实现.这样在主函数中就可以直接创建一个工厂类,再通过这个工厂类实现操作. 假设有一个 ...
- Java简单工厂模式
Java简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简 ...
- Java 静态工厂模式的使用
多相关文章请参考:http://www.enjoytoday.cn/categorys/java 静态工厂模式给人的第一印象就是:static+abstract.这两个词汇已经说明了一切,一个是周期长 ...
- 【设计模式】Java设计模式 -工厂模式
[设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...
- 从基础知识到重写Spring的Bean工厂中学习java的工厂模式
1.静态工厂模式其他对象不能直接通过new得到某个类,而是通过调用getInstance()方法得到该类的对象这样,就可以控制类的产生过程.顺带提一下单例模式和多例模式: 单例模式是指控制其他对象获 ...
随机推荐
- JQuery Mobile - 自定义图标!
环境 jquery1.9.1.js jquery mobile 1.4.2版 图标制作 18x18px 底透明的png图标 使用图标,这个过程开始怎么弄都不行,只有个灰色的圆出现,不见图标:或者出现图 ...
- C++调用API获取当前时间
#include <string> #include<iostream> #include<windows.h> #include <sstream> ...
- BZOJ 1011--[HNOI2008]遥远的行星(乱搞)
1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 5684 Solved ...
- Git-工作区和暂存区的概念
工作区(Working Directory):就是在电脑里能看到的目录,如testcase文件夹就是一个工作区. 版本库(Repository):工作区有一个隐藏目录.git,是Git的版本库. ...
- Swift5 语言参考(四) 表达式
在Swift中,有四种表达式:前缀表达式,二进制表达式,主表达式和后缀表达式.评估表达式会返回一个值,导致副作用,或两者兼而有之. 前缀和二进制表达式允许您将运算符应用于较小的表达式.主要表达式在概念 ...
- 【hyperscan】示例解读 pcapscan
示例位置: <hyperscan source>/examples/pcapscan.cc参考:http://01org.github.io/hyperscan/dev-reference ...
- django-子项目
当我们开始做一个项目的时候 ,当我们做的项目越来越大的时候py文件已经不足以分担 并且看起来不清晰 所以我们需要 新建一个子项目 这样的话可以方便管理 我们要建立子项目的话先进入那个项目的文件 ...
- java 简单认识移位运算符和位运算符
移位运算符和位运算符本质上都是操作二进制位,因为计算机存储的是二进制数据,运算效率相对较高. 移位运算符:把整数的二进制位进行左移或右移 .左移一位,相当于这个数乘以2, 右移一位,相当于这个数除以2 ...
- jdk1.8一键安装脚本(linux环境)
1.下载jdk安装包和安装脚本 下载地址:https://pan.baidu.com/s/1bo6ADQ3 其中包括: jdk安装包:jdk-8u151-linux-x64.tar.gz jdk一键安 ...
- java基本语法三
1 程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以将语句组合完成能完成一定功能的小逻辑模块. 流程控制方式采用结构化程序设计中规定的三种基本流程,即: ①顺序结构: 程序从上到下 ...