zoukankan      html  css  js  c++  java
  • [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();
  • 相关阅读:
    XMLHTTP使用具体解释
    C++之EOF()
    具体解释VB中连接access数据库的几种方法
    Android中部署自己的su
    hdoj 1052 Tian Ji -- The Horse Racing【田忌赛马】 【贪心】
    【C/C++多线程编程之九】pthread读写锁
    数据结构课程设计题目十二_计算机学院学生会的打印机(优先队列)
    百度开发人员面试题(优化)
    为Windows 7的winsxs目录瘦身,谨慎。
    sonix uvc驱动的加入 RT5350支持H264
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5442531.html
Copyright © 2011-2022 走看看