java设计模式2--工厂模式

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