zoukankan      html  css  js  c++  java
  • 工厂模式

    一.核心本质

     
                实现了调用者和创建者的分离,用工厂方法代替new操作
                将选择实现类,创建对象统一管理和控制.从而将调用者和实现类解耦
     
                    详细分类:
     
                    简单工厂模式
                                           用来生产同一等级结构的任意产品(增加新产品需要修改已有代码, 可通过装饰者模式优化)
     
                    工厂方法模式
                                            用来生产同一等级结构的固定产品(支持增加任意产品)
     
                    抽象工厂模式
                                           用来生产不同产品族的全部产品(支持增加产品族)

    二. 工厂示例

    2.1 简单工厂

    package com.skd.designMode.factory;
    
    public class SimpleFactory
    {
        public static Xiaomi getXiaomi()
        {
            return new Xiaomi();
        }
    
        public static Huawei getHuawei()
        {
            return new Huawei();
        }
    }
    
    class Xiaomi
    {
    }
    
    class Huawei
    {
    }

    2.2 工厂方法

    package com.skd.designMode.factory;
    
    /**
     * @TODO 工厂方法
     * 
     * 不同工厂实现同一个接口生产不同型号的同一类型产品
     * 
     */
    public class methodFactory
    {
        public static void main(String[] args)
        {
            MiPhone miPhone = (MiPhone) new MiPhone().createPhone();
            IPhone iPhone = (IPhone) new IPhone().createPhone();
            
        }
    
    }
    
    interface Phone{
        Phone createPhone();
    }
    
    class MiPhone implements Phone{
    
        @Override
        public Phone createPhone()
        {
            return new MiPhone();
        }
        
    }
    
    class IPhone implements Phone{
    
        @Override
        public Phone createPhone()
        {
            return new IPhone();
        }
        
    }

    2.3 抽象工厂

    package com.skd.designMode.factory;
    
    /**
     * @TODO 抽象工厂模式  用于生产产品族 支持增加产品族
     * 
     *         针对多个业务类型的场景(多个接口)
     */
    public class AbstractFactory
    {
        public static void main(String[] args)
        {
            // 高端汽车
            Car nbcar = new NBCar();
            // 高端引擎
            nbcar.createEngine();
            // 高端轮胎
            nbcar.createTyre();
            
            // 低端汽车
            Car sbcar = new SBCar();
            // 低端引擎
            sbcar.createEngine();
            // 低端轮胎
            sbcar.createTyre();
        }
    }
    
    /**
     * @TODO 汽车接口
     */
    interface Car{
        Tyre createTyre();
        Engine createEngine();
    }
    
    /**
     * @TODO 生产高端汽车
     */
    class NBCar implements Car {
    
        @Override
        public Tyre createTyre()
        {
            return new NBTyre().createTyre();
        }
    
        @Override
        public Engine createEngine()
        {
            return new NBEngine().createEngine();
        }
        
    }
    
    /**
     * @TODO 生产低端汽车
     */
    class SBCar implements Car {
    
        @Override
        public Tyre createTyre()
        {
            return new SBTyre().createTyre();
        }
    
        @Override
        public Engine createEngine()
        {
            return new SBEngine().createEngine();
        }
        
    }
    /**
     * @TODO 轮胎接口
     */
    interface Tyre{
        Tyre createTyre();
    }
    
    /**
     * @TODO 高端轮胎
     */
    class NBTyre implements Tyre{
    
        @Override
        public Tyre createTyre()
        {
            return new NBTyre();
        }
        
    }
    
    /**
     * @TODO 低端轮胎
     */
    class SBTyre implements Tyre{
    
        @Override
        public Tyre createTyre()
        {
            return new SBTyre();
        }
        
    }
    
    /**
     * @TODO 引擎接口
     */
    interface Engine{
        Engine createEngine();
    }
    
    /**
     * @TODO 高端引擎
     */
    class NBEngine implements Engine{
    
        @Override
        public Engine createEngine()
        {
            return new NBEngine();
        }
        
    }
    
    /**
     * @TODO 低端引擎
     */
    class SBEngine implements Engine{
    
        @Override
        public Engine createEngine()
        {
            return new SBEngine();
        }
        
    }
    如果文章对您有所帮助,可以点一下推荐哦
  • 相关阅读:
    Caffe + Ubuntu 15.04 + CUDA 7.0 新手安装配置指南
    姚斌分布式作业一
    一个简单正则表达式引擎的实现
    学习编程的方法
    [Leetcode]012. Integer to Roman
    [Leetcode]011. Container With Most Water
    JOS lab1 part2 分析
    我的Android Studio配置
    [Leetcode]009.Palindrome Number
    [Leetcode]008.String to Integer (atoi)
  • 原文地址:https://www.cnblogs.com/virgosnail/p/9445724.html
Copyright © 2011-2022 走看看