• [javaSE] 看知乎学习工厂模式


    factory的“本质”就是根据不同的输入创建出不同类型的对象。

    引入factory的原因就是你需要根据不同的输入创建不同类型的对象。

    简单工厂模式相当于是一个工厂中有各种产品,创建在一个类中,客户无需知道具体产品的名称,只需要知道产品类所对应的参数即可。但是工厂的职责过重,而且当类型过多时不利于系统的扩展维护。

    工厂方法模式相当于在简单工厂模式的基础上增加一个抽象工厂,在简单工厂模式下如果增加一个产品,要修改工厂类,不符合开闭原则。在工厂方法下,只需要增加具体工厂和具体产品即可。

    抽象工厂,类似于一个集团旗下生产的各种产品的工厂,这些产品是一个产品族。是在工厂方法下的扩展。比如一个产品的界面,可以通过直接改变具体工厂的实例来改变产品的界面风格。

    java版

    package com.tsh.mthread;
    
    
    public class Home {
    
        public static void main(String[] args) {
            Factory factory = new GoodsFactory();
            Product product =factory.instance();
            product.todo();
        }
    
    }
    //这样感觉是工厂方法模式
    //这是商品
    class Product{
        public void todo(){
            System.out.println("使用商品...");
        }
    }
    //这是工厂
    abstract class Factory{
        public abstract Product instance();
    }
    class GoodsFactory extends Factory{
        public  Product instance(){
            return new Product();
        }
    }

    js版:

    <script type="text/javascript">
    //这个应该是简单工厂模式
    function Product(){
        this.todo=function(){
            console.log("使用商品");
        }
    }
    function Factory(){
        this.instance=function(){
            return new Product();
        }
    }
    var factory=new Factory();
    product=factory.instance();
    product.todo();
    </script>

    PHP版:

    //PHP里面的工厂模式感觉最灵活啊
    //这是商品
    class Product{
        public function todo(){
            echo "使用商品...";
        }
    }
    //这是工厂
    class Factory{
        public static function instance($className){
            return new $className();
        }
    }
    $product=Factory::instance('Product');
    $product->todo();
  • 相关阅读:
    HSV 量化
    小议:部署SharePoint 2013时,无法连接SQL Server问题
    BZOJ 1492 货币兑换 cdq分治或平衡树维护凸包
    初识ASP.NET---一般处理程序
    Vue.js
    jQuery内部原理和实现方式浅析
    关于js中namespace命名空间模式
    MutationObserver 监听DOM树变化
    TCP/UDP常见端口参考
    运算符优先级
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5442531.html
Copyright © 2020-2023  润新知