java设计模式2————工厂模式
java设计模式2————工厂模式
1、工厂模式介绍:
1.1、实现了创建者与调用者的分离
1.2、详细分类:
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
1.3、所遵循的OOP原则:
- 开闭原则:对扩展开放,对修改关闭
- 依赖倒转原则:面向接口编程
- 迪米特法则:只与你直接的朋友进行通信,而避免与陌生人进行通信。
1.4、核心本质
- 实例化对象,不使用new,用工厂方法代替
- 将调用者与我们的实现类解耦
1.5、三种模式
2、简单工厂模式
2.1、先建立汽车抽象类
package com.xgp.company.第二种_工厂模式.简单工厂模式;
public interface Car {
void name();
}
2.2、制造车
制造“五凌”车
package com.xgp.company.第二种_工厂模式.简单工厂模式;
public class WuLing implements Car {
@Override
public void name() {
System.out.println("五凌宏观");
}
}
制造“特斯拉”车
package com.xgp.company.第二种_工厂模式.简单工厂模式;
public class Tesla implements Car {
@Override
public void name() {
System.out.println("特斯拉");
}
}
2.3、创建汽车工厂(两种方式工厂制造对像)
package com.xgp.company.第二种_工厂模式.简单工厂模式;
/**
* 简单工厂模式,又成为静态工厂模式
* 弊端:增加一个新产品时,如果你不修改代码,做不到
*/
/**
- 汽车工厂
*/
public class CarFactory {
public static Car getCar(String car) {
if("五凌".equals(car)) return new WuLing();
if("特斯拉".equals(car)) return new Tesla();
return null;
}
/**
- 第二种方式
- @return
*/
public static Car getWuLing() {
return new WuLing();
}
public static Car getTesla() {
return new Tesla();
}
}
2.4、建立买车类(传统方法创建对象被注释了和通过工厂创建对象)
package com.xgp.company.第二种_工厂模式.简单工厂模式;
/**
- 买车
/
public class Consumer {
/ //*
- 传统的方式
- @param args
//
public static void main(String[] args) {
//弊端:需要了解接口和所有的实现类
Car car1 = new WuLing();
Car car2 = new Tesla();
car1.name();
car2.name();
}*/
/**
- 简单工厂模式
- @param args
*/
public static void main(String[] args) {
Car car1 = CarFactory.getCar("五凌");
Car car2 = CarFactory.getCar("特斯拉");
car1.name();
car2.name();
}
}
2.5、缺点:如果要增加一个“大众”的汽车,还需要修改工厂代码
package com.xgp.company.第二种_工厂模式.简单工厂模式;
/**
- 弊端:增加实现类时需要改工厂类的代码
*/
public class Dazhong implements Car {
@Override
public void name() {
System.out.println("大众");
}
}
2.6、运行结果
五凌宏观
特斯拉
2.7、UML类图
3、工厂方法模式
3.1、建立汽车抽象类
package com.xgp.company.第二种_工厂模式.工厂方法模式;
public interface Car {
void name();
}
3.2、创建车
创建“五凌”车
package com.xgp.company.第二种_工厂模式.工厂方法模式;
public class WuLing implements Car {
@Override
public void name() {
System.out.println("五凌宏观");
}
}
创建“特斯拉”车
package com.xgp.company.第二种_工厂模式.工厂方法模式;
public class Tesla implements Car {
@Override
public void name() {
System.out.println("特斯拉");
}
}
3.3、创建汽车工厂的抽象类
package com.xgp.company.第二种_工厂模式.工厂方法模式;
public interface CarFactory {
Car getCar();
}
3.4、创建汽车工厂
创建制造“五凌”车的汽车工厂
package com.xgp.company.第二种_工厂模式.工厂方法模式;
public class WuLingFactory implements CarFactory {
@Override
public Car getCar() {
return new WuLing();
}
}
创建制造“特斯拉”车的汽车工厂
package com.xgp.company.第二种_工厂模式.工厂方法模式;
public class TeslaFactory implements CarFactory {
@Override
public Car getCar() {
return new Tesla();
}
}
3.5、新增一辆“大众”车
新增一辆“大众”车
package com.xgp.company.第二种_工厂模式.工厂方法模式;
/**
- 弊端:增加实现类时需要改工厂类的代码
*/
public class Dazhong implements Car {
@Override
public void name() {
System.out.println("大众");
}
}
新增一辆“大众”车的汽车工厂
package com.xgp.company.第二种_工厂模式.工厂方法模式;
public class DazhongFactory implements CarFactory {
@Override
public Car getCar() {
return new Dazhong();
}
}
3.6、创建消费者类
package com.xgp.company.第二种_工厂模式.工厂方法模式;
/**
- 买车
*/
public class Consumer {
public static void main(String[] args) {
Car car1 = new WuLingFactory().getCar();
Car car2 = new TeslaFactory().getCar();
Car car3 = new DazhongFactory().getCar();
car1.name();
car2.name();
car3.name();
}
//根据设计原则:工厂方法模式
//更据实际业务:简单工厂模式
}
3.7、弊端:增加实现类时需要改工厂类的代码
总结:
根据设计原则:工厂方法模式
更据实际业务:简单工厂模式
3.8、UML类图
4、小节
5、抽象工厂模式
5.1、该模式介绍
5.2、UML类图设计
5.3、创建生产产品种类的抽象类
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
/**
- 抽象产品工厂
*/
public interface IProductFactory {
//生产手机
IPhoneProduct iphoneProduct();
//生产路由器
IRouterProduct routerProduct();
}
5.4、创建手机和路由器的抽象接口
手机:
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
/**
- 手机接口
*/
public interface IPhoneProduct {
void start(); //开机
void shutdown(); //关机
void callup(); //打电话
void sendSMS(); //发短信
}
路由器:
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
/**
- 路由器产品接口
*/
public interface IRouterProduct {
void start(); //开机
void shutdown(); //关机
void openWifi(); //打开网络
void setting(); //设置参数
}
5.5、创建小米工厂
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
public class XiaomiFactory implements IProductFactory {
@Override
public IPhoneProduct iphoneProduct() {
return new XiaomiPhone();
}
@Override
public IRouterProduct routerProduct() {
return new XiaomiRouter();
}
}
5.6、小米工厂制造小米手机、小米路由器
制造小米手机:
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
/**
- 小米手机
*/
public class XiaomiPhone implements IPhoneProduct {
@Override
public void start() {
System.out.println("开启小米手机");
}
@Override
public void shutdown() {
System.out.println("关闭小米手机");
}
@Override
public void callup() {
System.out.println("小米打电话");
}
@Override
public void sendSMS() {
System.out.println("小米发短信");
}
}
制造小米路由器:
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
/**
- 小米路由器
*/
public class XiaomiRouter implements IRouterProduct {
@Override
public void start() {
System.out.println("开启小米路由器");
}
@Override
public void shutdown() {
System.out.println("关闭小米路由器");
}
@Override
public void openWifi() {
System.out.println("小米网络");
}
@Override
public void setting() {
System.out.println("小米参数");
}
}
5.7、创建华为工厂
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
public class HuaweiFactory implements IProductFactory {
@Override
public IPhoneProduct iphoneProduct() {
return new HuaweiPhone();
}
@Override
public IRouterProduct routerProduct() {
return new HuaweiRouter();
}
}
5.8、华为工厂制造华为手机、华为路由器
制造华为手机:
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
/**
- 华为手机
*/
public class HuaweiPhone implements IPhoneProduct {
@Override
public void start() {
System.out.println("开启华为手机");
}
@Override
public void shutdown() {
System.out.println("关闭华为手机");
}
@Override
public void callup() {
System.out.println("华为手机打电话");
}
@Override
public void sendSMS() {
System.out.println("华为手机发短信");
}
}
制造华为路由器:
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
public class HuaweiRouter implements IRouterProduct {
@Override
public void start() {
System.out.println("开启华为路由器");
}
@Override
public void shutdown() {
System.out.println("关闭华为路由器");
}
@Override
public void openWifi() {
System.out.println("华为网络");
}
@Override
public void setting() {
System.out.println("华为参数");
}
}
5.9、根据工厂制造产品
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
public class Client {
public static void main(String[] args) {
System.out.println("小米系列产品=");
//小米工厂
XiaomiFactory xiaomiFactory = new XiaomiFactory();
//小米手机
IPhoneProduct iphoneProduct = xiaomiFactory.iphoneProduct();
iphoneProduct.start();
iphoneProduct.callup();
iphoneProduct.sendSMS();
iphoneProduct.shutdown();
//小米路由器
IRouterProduct routerProduct = xiaomiFactory.routerProduct();
routerProduct.start();
routerProduct.openWifi();
routerProduct.setting();
routerProduct.shutdown();
System.out.println("================华为系列产品=================");
//华为工厂
HuaweiFactory huaweiFactory = new HuaweiFactory();
//华为手机
iphoneProduct = huaweiFactory.iphoneProduct();
iphoneProduct.start();
iphoneProduct.callup();
iphoneProduct.sendSMS();
iphoneProduct.shutdown();
//华为路由器
routerProduct = huaweiFactory.routerProduct();
routerProduct.start();
routerProduct.openWifi();
routerProduct.setting();
routerProduct.shutdown();
}
}
5.10、运行结果
================小米系列产品=================
开启小米手机
小米打电话
小米发短信
关闭小米手机
开启小米路由器
小米网络
小米参数
关闭小米路由器
================华为系列产品=================
开启华为手机
华为手机打电话
华为手机发短信
关闭华为手机
开启华为路由器
华为网络
华为参数
关闭华为路由器
进程完成,退出码 0
5.11、实际的UML类图
分析:
java设计模式2————工厂模式的更多相关文章
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
- Java设计模式之工厂模式(Factory模式)介绍(转载)
原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...
- Java 设计模式之工厂模式(二)
原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...
- 浅析JAVA设计模式之工厂模式(二)
1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...
- java 设计模式之工厂模式与反射的结合
工厂模式: /** * @author Rollen-Holt 设计模式之 工厂模式 */ interface fruit{ public abstract void eat(); } ...
- JAVA设计模式--抽象工厂模式
抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...
- Java设计模式之-----工厂模式(简单工厂,抽象工厂)
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- Java设计模式之工厂模式(简单工厂模式+工厂方法模式)
摘自http://blog.csdn.net/jason0539/article/details/23020989 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是 ...
- java设计模式之一工厂模式
简单工厂模式是java设计模式中最简单的设计模式之一: 工厂模式是最常用的设计模式之一. 工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模 ...
随机推荐
- $tarjan$简要学习笔记
$QwQ$因为$gql$的$tarjan$一直很差所以一直想着要写个学习笔记,,,咕了$inf$天之后终于还是写了嘻嘻. 首先说下几个重要数组的基本定义. $dfn$太简单了不说$QwQ$ 但是因为有 ...
- d3.js制作条形时间范围选择器
此文章为原创文章,原文地址:https://www.cnblogs.com/eagle1098/p/12146688.html 效果如上图所示. 本项目使用主要d3.js v4制作,可以用来选择两年的 ...
- WeihanLi.Npoi 1.7.0 更新
WeihanLi.Npoi 1.7.0 更新介绍 Intro 昨天晚上发布了 WeihanLi.Npoi 1.7.0 版本,增加了 ColumnInputFormatter/ColumnOutputF ...
- PrototypePattern(原型模式)-----Java/.Net
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.
- Linux学习之路--常用命令讲解
Linux常用命令讲解 1.命令格式:命令 [-选项] [参数] 超级用户的提示符是# 一般用户的提示符是$ 如:ls -la /usr说明: 大部分命令遵从该格式多个选项时,可以一起写 eg:ls ...
- 「CH2601」 电路维修 解题报告
CH2601 电路维修 描述 Ha'nyu是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女Rika,从而被收留在地球上.Rika的家里有一辆飞行车.有一天飞行车的电路板突然出现了故障 ...
- 应届生/社招面试最爱问的几道Java基础问题
本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb ([Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错 ...
- HTTP,来一个详细的学习。
HTTP 认识 HTTP 首先你听的最多的应该就是 HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol),这你一定能说出来,但是这样还不够,假如你是大厂面试官,这 ...
- JavaScript-null与' '的区别
null代表的是空对象无地址,而' '则代表的是有地址,但是这个地址里面的内容为空
- MAVEN配置及Spring Tool Suite的Maven配置
1.下载Maven http://maven.apache.org/download.cgi 如图点击下载即可 2.Maven配置 2.1配置本地仓库 创建目录maven-repository如图所示 ...