zoukankan      html  css  js  c++  java
  • 设计模式之--工厂模式

    工厂模式

      工厂模式(Factory Pattern)是Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    介绍

    意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

    何时使用:我们明确地计划不同条件下创建不同实例时。

    如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。

    关键代码:创建过程在其子类执行。

    注意事项:作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。

    简单工厂模式:

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

    优点:客户端不需要在负责对象的创建,从而明确了各个类的职责

    缺点:这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护。

    例如:

    有一个工厂,里面有静态创建动物的方法,里面时创建动物的逻辑代码,当客户端调用工厂的静态方法创建动物时只需传一个参数即可,就能得到想要的类的对象(具体的动物)

    定义一个抽象的Animal类---抽象产品角色

    1 package one;
    2 
    3 public abstract class Animal {
    4     public abstract void eat();
    5 }

    Dog---具体产品角色

    1 package one;
    2 
    3 public class Dog extends Animal{
    4 
    5     @Override
    6     public void eat() {
    7         System.out.println("狗吃肉");
    8     }
    9 }

    Cat----具体产品角色

    1 package one;
    2 
    3 public class Cat extends Animal{
    4 
    5     @Override
    6     public void eat() {
    7         System.out.println("猫吃鱼");
    8     }
    9 }

    AnimalFactory生产动物-----工厂类角色

     1 package one;
     2 
     3 public class AnimalFactory {
     4     
     5     private AnimalFactory() {
     6         
     7     }
     8     /*public static Dog createDog() {
     9         return new Dog();
    10     }
    11     
    12     public static Cat createCat() {
    13         return new Cat();
    14     }*/
    15     
    16     public static Animal createAnimal(String type) {
    17         if("dog".equals(type)) {
    18             return new Dog();
    19         }else if("cat".equals(type)){
    20             return new Cat();
    21         }else {
    22             return null;
    23         }
    24     }
    25 }

    AnimalDemo测试

     1 package one;
     2 
     3 public class AnimalDemo {
     4     public static void main(String[] args) {
     5         Dog d=new Dog();
     6         d.eat();
     7         Cat c=new Cat();
     8         c.eat();
     9         System.out.println("===============");
    10         //有了工厂之后
    11         /*Dog dog = AnimalFactory.createDog();
    12         Cat cat = AnimalFactory.createCat();
    13         dog.eat();
    14         cat.eat();*/
    15         //工厂改进
    16         Animal a=AnimalFactory.createAnimal("dog");
    17         a.eat();
    18         
    19     }
    20 }

    工厂方法模式:

      工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。

    优点:客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象添加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性。

    缺点:需要额外的编写代码,增加了工作量。

      工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method是一个类的实例化延迟到其子类。

    例子:

    Animal

    1 package two;
    2 
    3 public abstract class Animal {
    4     public abstract void eat();
    5 }

    Dog

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

    Cat

    1 package two;
    2 
    3 public class Cat extends Animal{
    4 
    5     @Override
    6     public void eat() {
    7         System.out.println("猫吃鱼");
    8     }
    9 }

    Factory

    1 package two;
    2 
    3 public interface Factory {
    4     public abstract Animal creatAnimal();
    5 }

    DogFactory

    1 package two;
    2 
    3 public class DogFactory implements Factory{
    4 
    5     @Override
    6     public Animal creatAnimal() {
    7         return new Dog();
    8     }
    9 }

    CatFactory

    1 package two;
    2 
    3 public class CatFactory implements Factory {
    4 
    5     @Override
    6     public Animal creatAnimal() {
    7         return new Cat();
    8     }
    9 }

    AnimalDemo--测试

     1 package two;
     2 
     3 public class AnimalDemo {
     4     public static void main(String[] args) {
     5         //要狗
     6         Factory f=new DogFactory();
     7         Animal dog = f.creatAnimal();
     8         dog.eat();
     9         System.out.println("===========");
    10         f=new CatFactory();
    11         Animal cat=f.creatAnimal();
    12         cat.eat();
    13     }
    14 }

    https://wenku.baidu.com/view/a4bae12c0066f5335a812160.html 见链接有三种工厂的详解

    电脑eclipse/XJS_Factory对三个工厂的代码实现

  • 相关阅读:
    linux之ftp命令详解
    ubuntu-18.04 设置开机启动脚本
    web端调起Windows系统应用程序(exe执行文件),全面兼容所有浏览器
    logstash 6.6.0 读取nginx日志 插入到elasticsearch中
    微服务架构中服务注册与发现
    logstash kafka output 日志处理
    filebeat输出到kafka
    nginx优化之request_time 和upstream_response_time差别
    利用ldirectord实现lvs后端realserver健康状态检查
    ELK 架构之 Logstash 和 Filebeat 安装配置
  • 原文地址:https://www.cnblogs.com/xjs1874704478/p/10738921.html
Copyright © 2011-2022 走看看