设计模式之——工厂模式
来源:互联网 发布:java string类getchars 编辑:程序博客网 时间:2024/06/06 01:43
什么是工厂模式?
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。
//工厂public class Factory { public BMW createBMW(int type){ switch (type) { case 320: return new BMW320(); case 523: return new BMW523(); } return null; }}//定义实体类abstract class BMW { public BMW(){ }}public class BMW320 extends BMW { public BMW320(){ System.out.println("制造320"); }}public class BMW523 extends BMW { public BMW523(){ System.out.println("制造523"); }}//定义消费者public class Customer { public static void main(String[] args) { Factory factory = new Factory(); factory.createBMW(320); factory.createBMW(523); }}
上面就是最最简单的工厂模式的例子,下面所要说的是抽象工厂模式,我的简单理解是:顶层的是抽象工厂,它定义了要生产哪些类型的东西,下面的子类工厂继承抽象工厂,来具体定义要生产什么样的东西,我们要用的时候就直接调用什么样的工厂来生产
**我们先来定义一个抽象工厂,定义要生产什么类型的东西**/** * * @ClassName: AbstractFactory * @Description: 抽象工厂* @author 志辉 * @date 2017年8月17日 */public abstract class AbstractFactory { abstract Food createFood(); abstract Water createWater();}**再来定义一个健康工厂,顾名思义,里面生产的全是健康的东西**public class HealthyFactory extends AbstractFactory{ @Override Food createFood() { return new Noodles();//生产面条 } @Override Water createWater() { return new SpringWater();//生产纯净水 }}**定义不健康的工厂,生产的是高热量的东西**public class UnhealthyFactory extends AbstractFactory { @Override Food createFood() { return new KFC();//生产快餐 } @Override Water createWater() { return new Cola();//生产可乐 }}**来定义一个食品介绍自己的接口,里面是介绍的方法,因为想不到其他的好的定义了=。= **/** * * @ClassName: Introduction * @Description: 定义一个介绍的接口* @author 志辉 * @date 2017年8月17日 */public interface Introduction { void introduce();}**来定义food water 等具体的实体类**public abstract class Food implements Introduction {}public abstract class Water implements Introduction{}public class Cola extends Water implements Introduction{ @Override public void introduce() { System.out.println("我是可乐,虽然我很好喝,但是却不健康哦"); }}public class KFC extends Food implements Introduction { @Override public void introduce() { System.err.println("我是快餐,虽然很好吃,但是不太健康哦"); }}public class Noodles extends Food implements Introduction{ @Override public void introduce() { System.out.println("我是面条,我很好吃,也很健康!"); }}public class SpringWater extends Water implements Introduction { @Override public void introduce() { System.out.println("我是矿泉水,很健康!"); }}**下面开始测试**/** * * @ClassName: Test * @Description: 测试类* @author 志辉 * @date 2017年8月17日 */public class Test { public static void main(String[] args) { AbstractFactory f1 = new HealthyFactory(); AbstractFactory f2 = new UnhealthyFactory(); Food noodles = f1.createFood(); Food kfc = f2.createFood(); Water springwater = f1.createWater(); Water cola = f2.createWater(); noodles.introduce(); kfc.introduce(); springwater.introduce(); cola.introduce(); }}**打印结果:我是面条,我很好吃,也很健康!我是矿泉水,很健康!我是可乐,虽然我很好喝,但是却不健康哦我是快餐,虽然很好吃,但是不太健康哦****从上面可以看出,我们想要什么样的东西就可以通过创建什么样的工厂然后调用createxxx方法来创建一个相对应的对象,创建的工厂会很多次用到多态。为什么明明可以直接用new解决的问题,偏偏还去搞个什么各种工厂,有点脱了裤子放屁的感觉,具体原因我还不能给出准确的答案,但相信不久的将来,我们一定会感受出其中的道理。**
阅读全文
1 0
- 设计模式之——工厂模式
- 设计模式之——工厂模式
- 设计模式之——工厂模式
- 设计模式之——工厂模式
- Java设计模式之工厂模式——简单工厂
- 设计模式——工厂模式之简单工厂
- 设计模式——工厂模式之工厂方法
- 设计模式——创建型模式之工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- Jquery全选和取消全选
- hdu6129-( Lucas定理)
- 【matlab】求导
- Android RIL简介
- 在windows 10上安装mac sierra虚拟机
- 设计模式之——工厂模式
- eclipse使用小技巧集锦
- 剑指offer题目的Java实现
- 【机器学习笔记之四】Adaboost 算法
- 漫谈协方差矩阵
- 接口的实现
- 搭建内部开发git服务器并使用hook实现自动部署
- 认老乡
- Asp.net 连接sql server使用域用户方法