栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式——工厂模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式——工厂模式

工厂模式 1. 简单工厂模式
  1. 生产的产品会拥有一个统一的接口

  2. 产品的实体类实现这个接口

    统一接口:

    public interface Phone {
    	void call();
    }
    

    实现类:

    public class XiaoMi implements Phone {
        public void call() {
            System.out.println("小米");
        }
    }
    
    public class HuaWei implements Phone {
        public void call() {
            System.out.println("华为");
        }
    }
    
    public class Apple implements Phone {
        public void call() {
            System.out.println("苹果");
        }
    }
    

    简单工厂:

    public class SimpleFactory {
        public Phone getPhone(String name) {
            Phone phone = null;
            if(name.equals("小米"))  {
                phone = new XiaoMi();
            } else if(name.equals("华为")) {
                phone = new HuaWei();
            } else if (name.equals("苹果")) {
                phone = new Apple();
            }
            //增加产品会很繁琐
            return phone;
        }
    }
    
  3. 缺点:要增加产品必须修改代码,不遵循开闭原则,不适合产品经常变化的场景

2. 抽象工厂模式
  1. 不负责增加产品,只需要增加产品接口之后交给实现类去增加,抽象工厂可以解决一系列的产品生产的需求当产品多时抽象工厂可以很好的进行管理和扩展
  2. 和简单工厂模式比较:如果产品种类比较确定那么应该使用简单工厂模式,如果产品种类多变应该使用抽象工厂模式
  3. 定义产品接口
    public interface IPhoneProduct {
        void open();
        void close();
        void call();
    }
    
    // 增加该产品只需要定义该接口然后添加实现类即可
    // 不必像简单工厂模式一样
    public interface IRouterProduct {
        void open();
        void close();
    }
    
  4. 实现接口
    public class MIPhone implements IPhoneProduct {
        public void open() {
            System.out.println("小米开机");
        }
    
        public void close() {
            System.out.println("小米关机");
        }
    
        public void call() {
            System.out.println("小米打电话");
        }
    }
    
    public class HWPhone implements IPhoneProduct{
    
        public void open() {
            System.out.println("华为开机");
        }
    
        public void close() {
            System.out.println("华为关机");
        }
    
        public void call() {
            System.out.println("华为打电话");
        }
    }
    
    public class HWRouter implements IRouterProduct {
        public void open() {
            System.out.println("华为路由器开机");
        }
    
        public void close() {
            System.out.println("华为路由器关机");
        }
    }
    
    public class MIRouter implements IRouterProduct {
        public void open() {
            System.out.println("小米路由器开机");
        }
    
        public void close() {
            System.out.println("小米路由器关机");
        }
    }
    
  5. 抽象工厂类
    // 定义工厂类接口
    public interface IProductFactory {
        IPhoneProduct getPhone();
        IRouterProduct getRouter();
    }
    
    public class HWFactory implements IProductFactory {
        public IPhoneProduct getPhone() {
            return new HWPhone();
        }
    
        public IRouterProduct getRouter() {
            return new HWRouter();
        }
    }
    
    public class MIFactory implements IProductFactory {
        public IPhoneProduct getPhone() {
            return new MIPhone();
        }
    
        public IRouterProduct getRouter() {
            return new MIRouter();
        }
    }
    
3. 工厂方法模式
  1. 工厂方法模式就是每一个产品都拥有自己的工厂,需要哪个产品就去找对应的工厂生产
  2. 虽然满足了开闭原则,但是当需要的产品很多时要创建很多工厂类
  3. 和简单工厂模式进行比较:工厂方法模式结构更为复杂,代码量更大,并且相比较于简单工厂更难于管理,所以工厂方法模式虽然满足设计原则,但并不适合实际运用,实际中简单工厂更加实用
  4. 定义工厂接口:
    public interface PhoneFatory {
        Phone getPhone();
    }
    
  5. 创建工厂实现类
    public class MiFactory implements PhoneFatory {
        public Phone getPhone() {
            return new XiaoMi();
        }
    }
    
    public class HwFactory implements PhoneFatory {
        public Phone getPhone() {
            return new HuaWei();
        }
    }
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271221.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号