博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java设计模式2--工厂模式
阅读量:6578 次
发布时间:2019-06-24

本文共 3903 字,大约阅读时间需要 13 分钟。

1、工厂模式特点

  可以工厂获取我们所需要的类。我们不需要知道工厂的内部是如何实现的,我们只需要告诉工厂我们需要哪个类,工厂就会自动返回我想要的类。

  简单来说:工厂帮我们隐藏了复杂的逻辑处理过程,我们只需要关心结果。

2、工厂模式分类

  1:简单工厂:功能强大,但可扩展性不强

  2:工厂方法:独立分工,但学习成本过高

  2:抽象工厂:简单工厂和工厂方法的结合

3、简单工厂模式

  例:假设有一个人想通过运营商要买一个4G、5.5寸屏幕的手机。运营商符合标准的只有三个牌子的手机:HUAWEI、OPPO、VIVO。这时这个人只要知道自己想买什么牌子的手机就可以拿到手机了,不需要知道如何生产手机的。

  实现:

(1)工艺标准接口 

1 public Interface Phone{2     fine static int memory=4;3     fine static float size=5.5;4     string getPhone();5 }

 (2)HUAWEI类,需要工艺标准那样子的手机

1 public class HUAWEI implement Phone{2     public String getPhone(){3         return "HUAWEI"+memory+"G内存"+size+"寸屏幕";4     }5 }

 (3)OPPO类,也是需要工艺标准那样子的手机

1 public class OPPO implement Phone{2     public String getPhone(){3         return "OPPO"+memory+"G内存"+size+"寸屏幕";4     }5 }

 (4)VIVO类,也是需要工艺标准那样子的手机

1 public class VIVO implement Phone{2     public String getPhone(){3         return "VIVO"+memory+"G内存"+size+"寸屏幕";4     }5 }

 (5)工厂类,实例化各牌子的手机供用户选择

1 public class SimpleFactory{ 2     public Phone getPhone(String name){ 3         if("HUAWEI".equalsIgnoreCse(name)){ 4             return new HUAWEI(); 5         }else if("OPPO".equalsIgnoreCase(name)){ 6             return new OPPO(); 7         }else if("VIVO".equalsIgnoreCase(name)){ 8             return new VIVO(); 9         }else{10             System.out.println("没有这个牌子的手机!!")11             return null;12         }13     }

(6)测试类,这里只要知道我需要手机牌子的名字,我就可以得到对应的实例化对象,我不需要知道它是如何创建的

1 public class SimpleFactoryTest {2     public static void main(String[] args) {3         // 实现统一管理、专业化管理4         Phone phone = new SimpleFactory().getPhone("HUAWEI");5         System.out.println("我获得了新手机:"+phone.getPhone());6     }7 }

 4、工厂方法模式

  定义一套公开的标准,然后不同的品牌的手机不同的工厂生产,HUAWEI生产HUAWEI的,OPPO生产OPPO的,有自己的个性化设置

(1)定义公开标准

public interface Phone{    public Phone getPhone();}

(2)HUAWEI生产HUAWEI手机,可以定制个性化

1 public class HUAWEIFactory implement Phone{2     public String color="白色";3     public Phone getPhone{4         return new HUAWEI();5     }6 }

 (3)OPPO生产OPPO的手机

1 public  class OPPOFactory implement Phone{2     public String color="黑色";3     public Phone getPhone(){4         return new OPPO();5     }6 }

 (4)VIVO生产VIVO的手机

1 public class VIVOFactory implement Phone{2     public String color="红色";3     public Phone getPhone(){4         return new VIVO();5     }6 }

(5)测试方法

public class Test{    public static void main(){        Phone phone=new HUAWEIFactory();        System.out.println("我要白色的HUAWEI手机:"+phone.getPhone);        phone=new OPPOFactory();        System.out.println("我要黑色的OPPO手机:"+phone.getPhone);        phone=new VIVOFactory();        System.out.println("我要红色的VIVO手机:"+phone.getPhone);    }}

5、抽象工厂模式

  第三代理品牌,代理了三家手机制造公司,然后卖给运营商,赚取中间差价。

1 #代理工厂 2 public abstract class AbstractFactory { 3     abstract Phone getPhone(); 4     //这段代码动态配置的功能 5     public Phone getPhone(String name) { 6         if ("HUAWEI".equalsIgnoreCase(name)) { 7             return new HUAWEIFactory().getPhone(); 8         } else if ("OPPO".equalsIgnoreCase(name)) { 9             return new OPPOFactory().getPhone();10         } else if ("VIVO".equalsIgnoreCase(name)) {11             return new VIVOFactory().getPhone();12         } else {13             System.out.println("这个r手机暂无生产");14             return null;15         }16 17     }18 }19 #默认工厂包装了HUAWEI类20 public class DefaultFactory extends  AbstractFactory{21     private HUAWEIFactory factory=new HUAWEIFactory();22     Phone getPhone() {23 24         return factory.getPhone();25     }26 }

(2)、HUAWEI工厂

1 public class HUAWEIFactory extends AbstractFactory {2     public Phone getPhone() {3         return new HUAWEI();4     }5 }

 (3)、OPPO工厂

1 public class OPPOFactory extends AbstractFactory {2     public Phone getPhone() {3         return new OPPO();4     }5 }

(4)、VIVO工厂

1 public class VIVOFactory extends AbstractFactory {2     public Phone getPhone() {3         return new VIVO();4     }5 }

 

转载于:https://www.cnblogs.com/EmilZs/p/9401514.html

你可能感兴趣的文章
C语言dos程序源代码分享(进制转换器)
查看>>
php项目中常用的log日志记录方法
查看>>
LogParser 导入MSSQL
查看>>
linux安装go环境并编写第一个go程序
查看>>
【在线研讨-现场文字】《敏捷开发用户故事分类与组织结构(二期-3)》2012-07-03...
查看>>
易语言 --什么情况下 用许可证
查看>>
项目总结:凡事预则立,不预则废!
查看>>
建属于自己的网站
查看>>
[linux] ubuntu 切换默认的/bin/sh
查看>>
boost库之智能指针
查看>>
linux c/c++ GDB教程详解(转载)
查看>>
我的友情链接
查看>>
自定义View Client 登录方式(一)
查看>>
cenOS+nginx+php+mysql (非一键包安装)
查看>>
我的友情链接
查看>>
我来自CSDN
查看>>
在mysql表中插入大量测试数据
查看>>
怎么给电脑设置IP地址和DNS地址,各系统设置IP/DNS几种方法
查看>>
面试总结之 oop desing 之 The Strategy Pattern
查看>>
必 备 习 题 集 (一)
查看>>