• 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 }
  • 相关阅读:
    ModelBinder——ASP.NET MVC Model绑定的核心
    asp.net
    深入C#内存管理来分析 值类型、引用类型、装箱、拆箱、堆栈几个概念
    C#网络编程
    [Architecture Pattern] Service Locator
    RestSharp使用详解
    系统性能优化一例
    C#开发的高性能EXCEL导入、导出工具DataPie
    ASP.NET MVC以ValueProvider为核心的值提供系统: DictionaryValueProvider
    ASP.NET MVC以ValueProvider为核心的值提供系统: NameValueCollectionValueProvider
  • 原文地址:https://www.cnblogs.com/EmilZs/p/9401514.html
Copyright © 2020-2023  润新知