工厂方法模式
来源:互联网 发布:iso9126软件质量模型 编辑:程序博客网 时间:2024/06/04 00:50
我们在看一些源码时经常会看到xxxxFactory,这就是工厂模式了。面向对象的23种设计模式点这里。说工厂模式之前先说个段子:有个单身的java程序员,过年回家晚上睡着了。父母看着独生的儿子就着急说“你看也不小了,这没有对象怎么办”,程序员在梦中“随便new 一个”。这个怕是不好new,所以我们要找今天的婚姻介绍所:工厂模式。废话不说,代码伺候:
public class Factory {//简单工厂模式 abstract class 美女 { abstract void 美女();//就一个方法,喊美女的时候会获得她 } private class 萝莉美女 extends 美女 { public void 美女() { System.out.println("获得一个萝莉美女"); } } private class 御姐美女 extends 美女 { public void 美女() { System.out.println("获得一个御姐美女"); } } public static void main(String[] args) { Factory factory = new Factory(); 美女 萝莉 = factory.获取美女("萝莉"); 萝莉.美女(); 美女 御姐 = factory.获取美女("御姐"); 御姐.美女(); } 萝莉美女 萝莉; public 美女 获取美女(String type) { switch (type) { case "萝莉": if (萝莉 == null) {//可以看到我们可以控制萝莉是否是单例,也可以控制她喜欢懒汉还是饿汉 萝莉 = new 萝莉美女(); } return 萝莉; case "御姐": return new 御姐美女(); } return null; }}输出:获得一个萝莉美女获得一个御姐美女
我们要知道光萝莉美女还有很多种,为了简单我们只实现萝莉的工厂方法模式:
public class Factory {//工厂方法模式,可以看出是把简单工厂的工厂写成接口,以后加个霸道美女啥的。脸蛋什么的,是为了说明工厂模式的解耦。 abstract static class 美女 { public String 脸蛋; public String 身材; public String 性格; void 美女(){ System.out.println("脸蛋:" + 脸蛋); System.out.println("身材:" + 身材); System.out.println("性格:" + 性格); } } private static class 萝莉美女 extends 美女 { public void 美女() { System.out.println("获得一个萝莉美女"); super.美女(); } } public static void main(String[] args) { 萝莉美女工厂 萝莉工厂 = new 萝莉美女工厂(); 萝莉美女 萝莉 = 萝莉工厂.获取美女("闭月羞花", "娇小", "温柔"); 萝莉.美女(); } 萝莉美女 萝莉; interface 美女工厂 { 美女 获取美女(String 脸蛋, String 身材, String 性格); } public static class 萝莉美女工厂 implements 美女工厂 { @Override public 萝莉美女 获取美女(String 脸蛋, String 身材, String 性格) { 萝莉美女 萝莉 = new 萝莉美女(); //大家可能发现了,这三个赋值在这儿不好,因为御姐美女也要赋值。 //所以是在美女工厂里提供一个静态方法,还是在美女抽象类里提供构造方法。 //所进行的改动对外没有影响,这就是解耦。 萝莉.脸蛋 = 脸蛋; 萝莉.身材 = 身材; 萝莉.性格 = 性格; return 萝莉; } }}输出:获得一个萝莉美女脸蛋:闭月羞花身材:娇小性格:温柔
可以看到我们把不同的脸蛋、身材的美女也获得了。但还有个问题,那就是萝莉身材不能是:大长腿,所以有了下面的抽象工厂模式。
阅读全文
1 0
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 【模式】工厂方法模式
- 工厂方法,抽象工厂模式
- C#工厂模式-工厂方法
- 工厂模式 和工厂方法
- 工厂模式-C-工厂方法
- 工厂模式以及工厂方法
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 工厂模式(简单工厂、工厂方法)
- 简单工厂|工厂方法|抽象工厂模式
- 设计模式-工厂模式(简单工厂模式+工厂方法模式)
- 同步更新测试
- POJ 2524-Ubiquitous Religions
- HttpClient使用SESSIONID模拟用户发送请求
- 常用排序算法的js实现(冒泡、选择、插入、归并、希尔、快排)
- SVN二次开发收集01
- 工厂方法模式
- SSM超强大整合,转载。。。
- [HDU 5507] GT and strings
- BlockCanary简介
- springmvc 拦截器
- OpenGL(二)
- 剑指Offer ReverseList 反转列表
- Jenkins的安装使用
- 网络营销实战课-笔记5