zoukankan      html  css  js  c++  java
  • 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新手,若有错误,欢迎指正!

  • 相关阅读:
    The Python Standard Library
    Python 中的round函数
    Python文件类型
    Python中import的用法
    Python Symbols 各种符号
    python 一行写多个语句
    免费SSL证书(https网站)申请,便宜SSL https证书申请
    元宇宙游戏Axie龙头axs分析
    OLE DB provider "SQLNCLI10" for linked server "x.x.x.x" returned message "No transaction is active.".
    The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "xxx.xxx.xxx.xxx" was unable to begin a distributed transaction.
  • 原文地址:https://www.cnblogs.com/Java-biao/p/12577416.html
Copyright © 2011-2022 走看看