Java中的工厂设计模式
引出工厂模式
package www.java.test;interface Computer{void printComputer();
}
class MacbookPro implements Computer{@Overridepublic void printComputer() {System.out.println("This is a MacbookPro");}
}
class SurfaceBook implements Computer{@Overridepublic void printComputer() {System.out.println("This is a Surfacebook");}
}
public class Test{//客户端public static void main(String[] args) {Computer computer = new MacbookPro();//子类为接口进行实例化处理computer.printComputer();}
}
如果我想买另外一款电脑,我就需要改变客户端的代码了,这就很麻烦了,所以我们就要想办法将实例化具体类的代码从客户端抽离(解耦到第三方),这时就需要用到工厂模式了。
简单工厂模式:用于没有产品族并且产品数量较少
专门定义一个类(第三方)用来创建其他类实例(解耦,将客户端创建对象的操作解耦到外部第三方类),被创建的实例通常都具有共同的父类。
package www.java.test;import java.util.Scanner;interface Computer{void printComputer();
}
class MacbookPro implements Computer{@Overridepublic void printComputer() {System.out.println("This is a MacbookPro");}
}
class SurfaceBook implements Computer{@Overridepublic void printComputer() {System.out.println("This is a Surfacebook");}
}
//第三方工厂类
class ComputerFactory{public static Computer getInstance(String type){if(type.equals("mac")){return new MacbookPro();}else if(type.equals("surface")){return new SurfaceBook();}return null;}
}
public class Test{//客户端public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入你想要的电脑型号:");String type = scanner.nextLine();Computer computer = ComputerFactory.getInstance(type);computer.printComputer();}
}
假如现在我需要一个新型号的电脑,用了工厂设计模式之后,主方法是不需要改变的,只需要在工厂类中加一条分支就行(对应于我们现实生活中的工厂,也就是加一条生产线)。
package www.java.test;import java.util.Scanner;interface Computer{void printComputer();
}
class MacbookPro implements Computer{@Overridepublic void printComputer() {System.out.println("This is a MacbookPro");}
}
class SurfaceBook implements Computer{@Overridepublic void printComputer() {System.out.println("This is a Surfacebook");}
}
class AlienWare implements Computer{@Overridepublic void printComputer() {System.out.println("This is a AlienWare");}
}
//第三方工厂类
class ComputerFactory{public static Computer getInstance(String type){if(type.equals("mac")){return new MacbookPro();}else if(type.equals("surface")){return new SurfaceBook();}else if(type.equals("alienware")){return new AlienWare();}return null;}
}
public class Test{//客户端public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入你想要的电脑型号:");String type = scanner.nextLine();Computer computer = ComputerFactory.getInstance(type);computer.printComputer();}
}
工厂方法模式----对应的是产品族
定义一个用来创建对象的接口,让子类决定实例化哪一个工厂。
我们需要加一个工厂接口,让不同的工厂类来实现这个接口。
package www.java.test;import java.util.Scanner;interface Computer{void printComputer();
}
class MacbookPro implements Computer{@Overridepublic void printComputer() {System.out.println("This is a MacbookPro");}
}
class SurfaceBook implements Computer{@Overridepublic void printComputer() {System.out.println("This is a Surfacebook");}
}
class AlienWare implements Computer{@Overridepublic void printComputer() {System.out.println("This is a AlienWare");}
}
interface ComputerFactory{Computer createCoputer();
}
class SurfaceFactory implements ComputerFactory{@Overridepublic Computer createCoputer() {return new SurfaceBook();}
}
class AppleFactory implements ComputerFactory{@Overridepublic Computer createCoputer() {return new MacbookPro();}
}
public class Test{//客户端public static void main(String[] args) {//假如我们现在需要苹果的产品//先拿到苹果的工厂ComputerFactory computerFactory = new AppleFactory();Computer computer = computerFactory.createCoputer();computer.printComputer();}
}
它与简单工厂的区别就在于多了一个抽象的工厂,多了很多具体工厂,以前是所有产品都在一个工厂中生产,而现在是不同产品在不同的工厂中生产。
还有一个升级的工厂模式:
抽象工厂—多个产品线混合
特点:提供一个创建一系列相关或相互依赖对象的接口(抽象工厂,多条产品线),而无需指定它们具体的类。
Java中的工厂设计模式相关推荐
- java设计模式工厂模式_Java中的工厂设计模式
java设计模式工厂模式 Welcome to the Factory Design Pattern in Java tutorial. Factory Pattern is one of the C ...
- Java中的生成器设计模式
Java 中的 Builder设计模式是一种创建模式,即用于创建对象,类似于 工厂方法设计模式 ,这也是创建设计模式. 在学习任何设计模式之前,我建议先找出特定设计模式要解决的问题. 众所周知, 必要 ...
- scala设计模式_Scala中的工厂设计模式
scala设计模式 I'm going to deliver a series of Scala Design Patterns in my coming posts. I will pick-up ...
- 第80节:Java中的MVC设计模式
第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...
- Java中的策略设计模式
策略设计模式是一种行为模式,其中我们有多种算法/策略来完成一项任务,所使用的算法/策略留给客户选择. 各种算法选项封装在单独的类中. 在本教程中,我们将学习在Java中实现策略设计模式. UML表示形 ...
- Java中的命令设计模式
在本教程中,我们将学习命令模式,这是一种重要的行为设计模式. 它具有一些重要的应用程序,例如在文本编辑器中实现撤消/重做功能. 在命令设计模式中,有一个命令对象位于发送方和接收方对象之间. 发送者对象 ...
- Java中的状态设计模式–示例教程
状态模式是行为设计模式之一 . 当对象根据其内部状态更改其行为时,将使用状态设计模式. 如果必须根据对象的状态更改其行为,则可以在对象中使用状态变量,并使用if-else条件块根据状态执行不同的操作. ...
- Java中的Memento设计模式-示例教程
记忆模式是行为设计模式之一 . 当我们要保存对象的状态以便以后可以恢复时,可以使用Memento设计模式. 记忆模式用于以这种方式实现该目的,即在对象外部无法访问该对象的已保存状态数据,从而保护了已保 ...
- Java中的访问者设计模式–示例教程
访客模式是行为设计模式之一 . 当我们必须对一组相似类型的对象执行操作时,将使用访问者模式. 借助访问者模式,我们可以将操作逻辑从对象移动到另一个类. 例如,假设有一个购物车,我们可以在其中添加不同类 ...
最新文章
- LeetCode实战:螺旋矩阵
- C语言中二维指针,C语言中怎样区分一维指针和二维指针?
- 全球半导体产业迁移 中国的机遇与挑战
- Mysql 日志系统 redo log 和 binlog
- 在win7下将CapsLock按键变成esc
- 网络中的计算机如果加入家庭组,win10系统加入其他计算机家庭组的操作方法
- Thread.sleep() / Object.wait() / Condition.await() / LockSupport.park() / LockSupport.unpark() 区别
- ES8新特性_async和await结合发送ajax请求---JavaScript_ECMAScript_ES6-ES11新特性工作笔记051
- 何把SATA/RAID驱动集成到win xp 安装盘里?
- VMware下虚拟系统上网与互ping
- 织梦搜索结果增加dede:type、dede:arclist、dede:channelartlist、dede:tag等标签支持
- android 用platform.x509.pem platform.pk8对apk进行签名
- unipus iTEST考试助手---写脚本与反脚本的拉锯战
- rm——删除文件、文件夹
- 转载的一片关于Mapper.xml中sql的相关技术点,供以后自己慢慢学习之用
- java计算机毕业设计冠军体育用品购物网站MyBatis+系统+LW文档+源码+调试部署
- ajax post无效,jQuery AJAX Post无效
- 天源财富:室温下成功合成新型稳定有机化合物
- 论文插图用计算机绘制,论文中插图和表格的绘制种类
- 北航2022软件工程第三次作业——结对编程(最长英语单词链)