Java 简单工厂

新建了两个类
//宝马320
public class BMW320 {
public BMW320(){
System.out.println("制造-->BMW320");
}
}
客户端:
public class Customer {
public static void main(String[] args) {
BMW320 bmw320 = new BMW320();
BMW523 bmw523 = new BMW523();
}
}
结果:
另外一个例子:比如说, 客户需要买手机
public class Iphone {
public void iphone () {}
}
public class Huawei {
public void huawei () {}
}
客户端的调用示例如下:
Iphone phone1 = new Iphone();
phone1.iphone(); Huawei phone2 = new Huawei();
phone2.huawei();
这样的方式非常原始,也很简单,但是代码的逻辑不清晰,暴露的内容过多。
解决的方案:
抽象逻辑,提供接口
public interface Phone {
void play();
}
然后,将所有手机类都实现 Phone 接口,将暴露给客户端调用的逻辑都封装在 play 方法里。
public class Iphone implements Phone {
@Override
public void play() {
System.out.println("给我一台Ipone");
}
}
public class Huawei implements Phone {
@Override
public void play() {
System.out.println("给我一台华为");
}
}
那么,客户端需要知道的调用 API 就减少到了两种:
- Phone 接口的信息
- Phone 接口有哪些实现类
调用的逻辑就变简单了:
Phone phone1 = new Iphone();
phone1.play(); Phone phone2 = new Huawei();
phone2.play();
产品类:
abstract class BMW {
public BMW(){ }
}
public class BMW320 extends BMW {
public BMW320() {
System.out.println("制造-->BMW320");
}
}
public class BMW523 extends BMW{
public BMW523(){
System.out.println("制造-->BMW523");
}
}
工厂类:
public class Factory {
public BMW createBMW(int type) {
switch (type) { case :
return new BMW320(); case :
return new BMW523(); default:
break;
}
return null;
}
}
客户类:
public class Customer {
public static void main(String[] args) {
Factory factory = new Factory();
BMW bmw320 = factory.createBMW();
BMW bmw523 = factory.createBMW();
}
}
结果:和最原始的一样,不过中间有工厂类,客户可以通过工厂类,创建需要的车辆
2、 工厂方法模式
产品类:
abstract class BMW {
public BMW() {
}
}
//宝马523
public class BMW523 extends BMW {
public BMW523() {
System.out.println("制造-->BMW523");
}
} //宝马320
public class BMW320 extends BMW{
public BMW320() {
System.out.println("制造-->BM320");
}
}
创建工厂接口:
public interface Factory {
BMW createBMW();
}
实现接口:
public class FactoryBMW320 implements FactoryBMW{ @Override
public BMW320 createBMW() { return new BMW320();
} }
public class FactoryBMW523 implements FactoryBMW {
@Override
public BMW523 createBMW() { return new BMW523();
}
}
客户类:
public class Customer {
public static void main(String[] args) {
FactoryBMW320 factoryBMW320 = new FactoryBMW320();
BMW320 bmw320 = factoryBMW320.createBMW(); FactoryBMW523 factoryBMW523 = new FactoryBMW523();
BMW523 bmw523 = factoryBMW523.createBMW();
}
}
抽象工厂模式代码
接口:
//发动机以及型号
public interface Engine {
}
实现接口:
public class EngineA implements Engine{
public EngineA(){
System.out.println("制造-->EngineA");
}
}
public class EngineB implements Engine{
public EngineB(){
System.out.println("制造-->EngineB");
}
}
接口:空调以及型号
public interface Aircondition {
}
实现接口:
创建工厂的接口 :
public interface AbstractFactory {
//制造发动机
public Engine createEngine();
//制造空调
public Aircondition createAircondition();
}
实现:为宝马320系列生产配件
public class FactoryBMW320 implements AbstractFactory{
@Override
public Engine createEngine() {
return new EngineA();
}
@Override
public Aircondition createAircondition() {
return new AirconditionA();
}
}
实现:为宝马523系列生产配件
public class FactoryBMW523 implements AbstractFactory { @Override
public Engine createEngine() {
return new EngineB();
} @Override
public Aircondition createAircondition() {
return new AirconditionB();
} }
客户:
public class Customer {
public static void main(String[] args){
//生产宝马320系列配件
FactoryBMW320 factoryBMW320 = new FactoryBMW320();
factoryBMW320.createEngine();
factoryBMW320.createAircondition(); //生产宝马523系列配件
FactoryBMW523 factoryBMW523 = new FactoryBMW523();
factoryBMW320.createEngine();
factoryBMW320.createAircondition();
}
}
Java 简单工厂的更多相关文章
- !!转!!java 简单工厂模式
举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就是 ...
- Java简单工厂模式
Java简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简 ...
- 设计模式(二)——Java简单工厂模式
简单工厂模式 案例: 披萨的项目(要便于披萨种类的扩展,要便于维护) 1)披萨的种类很多(比如 GreekPizz.CheesePizz 等) 2)披萨的制作有 prepare,bake, cut, ...
- JAVA简单工厂模式(从现实生活角度理解代码原理)
简单工厂模式(Simple Factory),说他简单是因为我们可以将此模式比作一个简单的民间作坊,他们只有固定的生产线生产固定的产品.也可以称他为静态工厂设计模式,类似于之前提到过静态代理设计模式, ...
- (转) java 简单工厂模式(实现一个计算器)
package com.simpleFactory; /** * 运算类 * @author Administrator * */ public class Operation { private d ...
- Java简单工厂模式以及来自lambda的优化
前言 设计模式是软件工程中一些问题的统一解决方案的模型,它的出现是为了解决一些普遍存在的,却不能被语言特性直接解决的问题,随着软件工程的发展,设计模式也会不断的进行更新,本文介绍的是经典设计模式 ...
- Java简单工厂模式(SimpleFactoryMode)
何为简单工厂模式? 由一个工厂类根据传入的参数,动态创建并返回相应的具体的实例! 三个构成元素: 1.工厂类 2.抽象产品 3.具体产品 优点: 1.提高扩展性 2.隐藏具体的实现类,并不需要知道产品 ...
- java简单工厂设计模式
一.基本定义 /* *简单工厂设计模式: *文字描述理解: * 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式. * 通过专门定义一个类来负责创建其它类的实例,被创建的实例通常 * 都具有共同 ...
- java 简单工厂 工厂模式
<Head First 设计模式>学习中 分类 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) ...
随机推荐
- opencv学习之显示图像-imshow函数
序 上一篇opencv学习之读取图像-imread函数介绍完opencv读取图片函数imread,这次来介绍与它对应的图像显示函数imshow. imshow函数 imshow函数功能 imshow的 ...
- Spring Boot解决无法访问图片的问题
找了很多Spring Boot项目访问图片的解决方式,发现都是配置的,有时配置了也没有用.然后自己研究了一种简单操作的方法. 1,在Spring Boot的static目录下创建一个新目录img(或者 ...
- selenium之京东商品爬虫
#今日目标 **selenium之京东商品爬虫** 自动打开京东首页,并输入你要搜索的东西,进入界面进行爬取信息 ``` from selenium import webdriver import t ...
- python格式化当前时间,暂停一秒输出
python格式化输出当前系统时间,可以实现暂停1秒输出时间 import timefor i in range(10): print(time.strftime("%Y-%m-%d %H: ...
- Linux 查看系统相关信息(系统发型版本及内核版本等)
以下为 Linux 以下信息查看命令,记录以备用 # uname -a # 查看内核/操作系统/CPU信息 # /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # ...
- Git 生成.gitinore忽略文件
Git 生成.gitinore忽略文件 CD到指定目录下: touch .gitinore .gitinore忽略文件 三种方法: # 以'#'开始的行,被视为注释.(#是注释的意思) # 忽略掉所 ...
- div悬浮在屏幕的中间及点击按钮关闭弹出框
#fd { position: fixed; z-index: 999; width: 109px; height: 323px; top: 71%; right: 1%; margin: -50px ...
- SpringBoot+SpringCloud 笔记
SpringBoot总结 使用Typora打开https://pan.baidu.com/s/1tXS45j6ooXpnzhy1Zp78Gw 提取码: c8fi SpringCloud总结 使用XMi ...
- C++有静态成员变量的类继承
声明和定义 1.变量的定义 变量的定义用于为变量分配存储空间,还可以为变量指定初始值.在一个程序中,变量有且仅有一个定义. 2.变量的声明 用于向程序表明变量的类型和名字.程序中变量可以声明多次,但只 ...
- 接口测试断言详解(Jmeter)
接口测试是目前最主流的自动化测试手段,它向服务器发送请求,接收和解析响应结果,通过验证响应报文是否满足需求规约来验证系统逻辑正确性.接口的响应类型通过Content-Type指定,常见的响应类型有: ...