zoukankan      html  css  js  c++  java
  • 设计模式——工厂模式(简单工厂)

    一、什么是工厂模式:

      在人类社会发展中,起初人们生活所需品都是自供自给,饭菜,衣服,家具都是由自己制作,这样感觉人们要和很多行业有接触,很麻烦。后来逐渐出现了各种”工厂“,由他们代替你去生产所需品,你要什么式样的东西只要告诉它们,它们就会给你生产好,这样你可以抽出大量精力去做其他重要的事了。

      在程序世界中也一样,以前每当我们需要什么实例对象,都是自己new出来的,这样的坏处是会和很多类有牵连,耦合度高(要new一只狗,就要引入Dog类,要new一只猫,就要引入Cat类),那我们完全可以像真实世界中一样,把这项工作交给”工厂“去办,我们要创建什么类型的实例,只要给工厂传入某种参数告知他们就行了,工厂会替你创建实例对象。这便是工厂模式思想。工厂模式分三种:简单工厂模式,工厂方法模式,抽象工厂模式。本篇讲解简单工厂模式。

    二、简单工厂模式:

      

      简单工厂模式是工厂模式中最简单简陋的形式。它的工厂类就是一个实实在在的具体工厂类,里面有逻辑判断,它会判断你传入的不同参数而创建不同的实例。按理说这样没问题,但这样是不完美的请看例子:

    //抽象产品类:定义一类产品,接口或抽象类
    public interface Animal
    {
        public void run(); //接口只声明方法,不实现
    }
    //具体产品类1:Dog类实现Animal接口
    public class Dog implements Animal
    {
        public void run()
        {
             System.out.println("狗run!");
        }
    }
    //具体产品类2:Cat类实现Animal接口
    public class Cat implements Animal
    {
        public void run()
        {
             System.out.println("猫run!");
        }
    }
    //具体工厂类:传入参数,生成不同的动物。
    public class Factory
    {
        public Animal create(String str)
        {
            if(str.equals("dog"))
                return new Dog();
            if(str.equals("cat"))
                return new Cat();
        }
    }
    //主程序:要用到实例的类
    public class Main()
    {
        public static void main(String[] args)
        {
            Factory fact = new Factory();
            Dog dog = (dog)fact.create("dog"); //传入dog参数,生产对象
            Cat cat = (cat)fact.create("cat");
        }
    }

    该简单工厂的例子的不足之处是:当产品种类增加时,程序员除了新建这个具体产品类外,还得在工厂类里增添判断逻辑,也就是说要修改已经存在的类,这样不利于维护。如果改变了需求,我们的处理原则是创建新的类,在新的地方写新需求,而不是去修改原来的代码。所以,我们改进了简单工厂模式,想出了工厂方法模式。工厂方法模式到底是怎么样的?请见下篇。

     

  • 相关阅读:
    Windows下的RabbitMQ安装:RabbitMQ_Service安装
    [Java]private, public,protected,friendly的区别(转载)一下子就记住了
    mysql的一些sql用法
    set(string str)变量传参为int的问题
    eclipse插件开发常见的问题及解决办法
    eclipse 内存溢出
    如何在一台机器上运行2个Tomcat
    eclipse svn使用
    eclipse遇到的异常
    oracle学习
  • 原文地址:https://www.cnblogs.com/wangerxiansheng/p/4159298.html
Copyright © 2011-2022 走看看