• Java设计模式--简单工厂模式


    一、简单工厂模式

    又叫静态工厂方法模式,属于类创建型模式,它定义一个具体的工厂类负责创建一些类的实例。

    简单工厂模式包含了三个角色:

    A.抽象产品角色: 一般用接口 或 抽象类实现

    B.具体的产品角色:具体的类的实现

    C 工厂角色:实例的产生,根据不同参数,返回不同的类的实例对象。

    简单工厂模式最直接的目的就是为了解耦,把对象的创建和使用的过程分开。用工厂方法来代替new操作的一种模式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

    二、案例如下:

    需求:创建Dog对象和Cat对象并分别调用它们的eat()方法。

    在未使用简单工厂模式的时候,直接定义两个实体类,并实例化对象

    public abstract class Animal {
    	public abstract void eat();
    }
    
    public class Dog extends Animal {
    	@Override
    	public void eat() {
    		System.out.println("狗吃肉");
    	}
    }
    
    public class Cat extends Animal {
    	@Override
    	public void eat() {
    		System.out.println("猫吃鱼");
    	}
    }
    
    public class TestDemo {
    	public static void main(String[] args) {
    		Dog d = new Dog();
    		Cat c = new Cat();
    		d.eat();
    		c.eat();
    	}
    }
    

    main方法中进行测试

    public class TestDemo {
    	public static void main(String[] args) {
    		Dog d = new Dog();
    		Cat c = new Cat();
    		d.eat();
    		c.eat();
    	}
    }
    

    测试结果如下:

    虽然目前看起来好像直接使用类创建实例后在调用方法比较简单,但其实当我们还需要给实例对象进行初始化的时候就会发现还是有点麻烦的。

    现在使用简单工厂模式:

    先创建一个AnimalFactory工厂类,用来生产需要的动物对象。

    public class AnimalFactory {
    	public static Dog createDog() {
    		return new Dog();
    	}
        
    	public static Cat createCat() {
    		return new Cat();
    	}
    }
    

    在main中进行测试:

    public class TestDemo {
    	public static void main(String[] args) {
    		Dog d = new Dog();
    		Cat c = new Cat();
    		d.eat();
    		c.eat();
    		
    		System.out.println("--------------------");
    		//使用简单工厂模式
    		Dog dd = AnimalFactory.createDog();
    		Cat cc = AnimalFactory.createCat();
    		dd.eat();
    		cc.eat();
    	}
    }
    

    测试结果如下:

    三、简单工厂模式的优缺点

    优点
    客户端不需要在负责对象的创建,从而明确了各个类的职责
    缺点
    这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护

    Java新手,若有错误,欢迎指正!

  • 相关阅读:
    Java8新特性
    搜索解决方案 -- ElasticSearch入门
    插入排序
    单点登录系统CAS入门
    快速排序
    选择性排序
    冒泡排序
    springcloud入门
    消息中间件 -- RabbitMQ
    ActiveMQ中消息的重发与持久化保存
  • 原文地址:https://www.cnblogs.com/Java-biao/p/12577416.html
Copyright © 2020-2023  润新知