• 设计模式-抽象工厂模式(升级版工厂方法模式)


    首先,需要了解一下java设计模式6大原则中的开闭原则:只对 拓展开放,修改关闭。也就是你可以继承我的类来进行拓展,但不能重写我的方法。

    如果将方法比喻为工厂,对象成为产品,工厂模式就是调用固定的方法来创建固定的对象,但是如果想添加新产品的时候会违反开闭原则。所以要将工厂方法和产品抽象化,添加新产品的时候不用修改原来的代码,也不用违反开闭原则。单一工厂生产单一产品,共同实现公共接口

    公共抽象工厂来生产产品

    abstract class Factory {
        public abstract Product produce();
    }

    公共抽象产品类

    abstract class Product {
        public abstract  void work();
    }

    具体产品A

    public class ProductA extends Product {
        @Override
        public void work() {
            System.out.println("生产第一种商品");
        }
    }

    具体工厂1生产产品A

    public class FactoryA extends Factory {
        @Override
        public Product produce() {
            return new ProductA();
        }
    }

    具体产品B

    public class ProductB extends Product {
        @Override
        public void work() {
            System.out.println("生产第二种商品");
        }
    }

    具体工厂B来生产产品B

    public class FactoryB extends Factory {
        @Override
        public Product produce() {
            return new ProductB();
        }
    }

    测试类

    public class Client {
        public static void main(String[] args) {
           //生产A产品
            FactoryA factoryA = new FactoryA();
            factoryA.produce().work();
           //生产B产品
            FactoryB factoryB = new FactoryB();
            factoryB.produce().work();
        }
    }

    在将工厂和产品都抽象化之后 好处和坏处是显而易见的

    好处:真正满足了开闭原则,添加新产品只需要继承公共工厂类和公共产品类,无需修改公共类,单一职业,每个工厂只负责生产对应的产品

    坏处:耦合度高了,如果产品变化,生产它的对应工厂代码也可能变化,而且代码是成对增加的。

    应用场景:创建对象时不需要知道具体的类名,只需要委托给对应的工厂,创建好对象后可以再动态指定类型,

    
    
    
    不和别人一样,不复制只真正理解
  • 相关阅读:
    saltstack安装和配置
    puppet安装和配置
    mongodb使用
    mongdb安装
    redis数据类型
    redis安装
    memcached结合php以及memcache共享session
    yum安装的Apache的各种配置文件的位置
    memcached 基本操作
    memcached基本操作和语法
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12780479.html
Copyright © 2020-2023  润新知