zoukankan      html  css  js  c++  java
  • Java设计模式--工厂方法模式

    一、工厂方法模式概述

    工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象。

    目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个产品具体对象。

    工厂方法模式包含四个部分:

    1.抽象产品:产品对象同一的基类,或者是同一的接口。

    2.具体的产品:各个不同的实例对象类

    3.抽象工厂:所有的子类工厂类的基类,或是同一的接口

    4.具体的工厂子类:负责每个不同的产品对象的实际创建

    二、案例如下:

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

    步骤A:先定义抽象产品

    public abstract class Animal {
    	public abstract void eat();
    }
    

    步骤B:定义各个不同的实例对象类

    public class Dog extends Animal {
    	@Override
    	public void eat() {
    		System.out.println("狗吃肉");
    	}
    }
    
    public class Cat extends Animal {
    	@Override
    	public void eat() {
    		System.out.println("猫吃鱼");
    	}
    }
    

    步骤C:定义抽象工厂

    public interface Factory {
    	public abstract Animal createAnimal();
    }
    

    步骤D:定义具体的工厂子类

    public class DogFactory implements Factory {
    	@Override
    	public Animal createAnimal() {
    		return new Dog();
    	}
    }
    
    public class CatFactory implements Factory{
    	@Override
    	public Animal createAnimal() {
    		return new Cat();
    	}
    }
    

    在main方法中进行测试:

    public class TestDemo {
    	public static void main(String[] args) {
    		Factory f;
    		f = new DogFactory();
    		Dog d = (Dog) f.createAnimal();
    		d.eat();
    		
    		System.out.println("---------------");
    		f = new CatFactory();
    		Cat c = (Cat) f.createAnimal();
    		c.eat();
    	}
    }
    

    测试结果如下:

    三、工厂方法模式优缺点:

    优点
    客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性。
    缺点
    需要额外的编写代码,增加了工作量。
    Java新手,若有错误,欢迎指正!

  • 相关阅读:
    C#之Raw Socket实现网络封包监视
    es6Promise及小程序Promise用法
    在微信小程序的JS脚本中使用Promise来优化函数处理
    小程序踩过的一个小坑---解析二维码decodeURIComponent() url解码
    js json转url参数
    微信小程序-实现分享(带参数)
    php中的匿名函数和闭包(closure)
    微信小程序之回调函数
    php AES cbc模式 pkcs7 128位加密解密(微信小程序)
    微信小程序,开发中几个重要的知识点(加密解密,转发,进入场景,session_key)
  • 原文地址:https://www.cnblogs.com/Java-biao/p/12577588.html
Copyright © 2011-2022 走看看