Java设计模式之工厂模式
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设计模式之工厂模式相关推荐
- Java设计模式(工厂模式>抽象工厂模式和原型模式)
Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...
- Java 设计模式之工厂模式(二)
原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...
- java设计模式之工厂模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- Java设计模式之工厂模式篇 (转)
Java设计模式之工厂模式篇 (转)[@more@]Java设计模式之工厂模式篇 作者:冯睿 本文选自:赛迪网 2003年03月07日 .NET.com.cn/servlets/ad?Pool=te ...
- Java设计模式之 工厂模式(简单工厂模式)
前一阵子学习了Java 中据说是最简单的设计模式的 单例模式,想一起讨论学习的小伙伴请点击这里: Java 设计模式之单例模式 那么今天就把学习的工厂模式记录下来 工厂模式: 实现了创建者和调用者的分 ...
- Java设计模式之工厂模式 (工厂方法模式)
上一篇我们学习了简单工厂模式,最后对于增加新产品的缺点,我们在工厂方法模式中解决. 为学习简单工厂模式的小伙伴点击这里Java 设计模式之工厂模式(简单工厂模式) 工厂方法模式要点: 避免简单工厂模式 ...
- 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)
[JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...
- JAVA设计模式之工厂模式讲解
目录 前言 开始表演 前言 Java中使用工厂模式的主要原因是为了实现代码的灵活性和可维护性.工厂模式是一种创建型设计模式,它提供了一种将对象的创建和使用进行分离的方式.具体来说,工厂模式可以将对象的 ...
- Java设计模式:工厂模式
问题提出 Java的工厂模式与现实生活中的工厂的模型是很相似的.工厂是用来做什么?当然是用来生成产品.因此在Java的工厂模式的关键点就是如何描述好产品和工厂这2个角色之间的关系. 下面来仔细描述一下 ...
- java设计模式---抽象工厂模式
工厂模式在项目中是常常用到的,有人说只有大项目才会用到,小项目是体会不出来.其实使用设计模式与项目的大小没有实质性的联系.设计模式是经验的总结而不是衡量项目大小的标准. 以开发项目的DAO层为例,在项 ...
最新文章
- 编写函数求两个整数 a 和 b 之间的较大值。要求不能使用if, while, switch, for, ?: 以 及任何的比较语句。...
- jenkins插件之Publish Over FTP
- 2016年8月份学习总结,读书《书都不会读,你还想成功》
- c 连接mysql后 怎么用_使用C语言连接mysql,并进行操作
- Java使用继承的语法是,Java使用继承
- java调用支付接口实例_Java 调用支付宝接口
- Zabbix监控Zookeeper健康状况
- Redis 6 RC1发布,带来众多新特性
- python中的translate_Python translate()方法
- 简易 Vue 构建--篇三
- libcurl学习及简易封装类
- iOS App图标和启动画面尺寸http://www.jianshu.com/p/adpKye
- VS2010与.NET4系列 10. VS2010代码智能感知增强
- php 股票历史api接口,新浪股票接口获取历史数据
- 宝宝起名和姓名打分源码(PHP和JAVA版)
- EXCEL,复制内容随时会卡死,经常发生
- 微信公众平台开发2-access_token获取及应用(含源码)
- Ashen的成长,从CSDN博客开始!
- UVa Problem 10001 Garden of Eden (伊甸园)
- SSLOJ·谷仓的安保【DFS】