设计模式之工厂模式

在这里插入图片描述

工厂方法模式概述

  • 工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。
    1. 优点
      *客户端不需要在负责对象的创建,从而明确了各个类的职责
      *如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码
      *后期维护容易,增强了系统的扩展性
      2.缺点
      *需要额外的编写代码,增加了工作量~~

- 测试类

package lesson.animal.animal;

/**
 * User: 彭家琪
 * Date: 2019/9/10   17:10
 */
public class Demo {
    public static void main(String[] args) {


        //传统的创建对象
        Dog dog = new Dog();
        dog.setName("旺财");

        Pig pig = new Pig();
        pig.setName("佩奇");

        dog.eat();
        pig.eat();
        System.out.println("*********************");
        //使用工厂模式来创建对象

        DogFactory dogFactory = new DogFactory();
        Animal dog1 = dogFactory.createAnimal();
        dog1.eat();


        PigFactory pigFactory = new PigFactory();
        Animal pig1 = pigFactory.createAnimal();
        pig1.eat();
    }
}

- 定义动物属性

package lesson.animal.animal;

/**
 * User: 彭家琪
 * Date: 2019/9/10   17:10
 */
public abstract class Animal {

    private String name;
    private  String color;

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Animal{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public abstract void eat();
}

- 创建抽象动物工厂方法

package lesson.animal.animal;

/**
 * User: 彭家琪
 * Date: 2019/9/10   17:09
 */
/*public interface AnimalFactory {
}*/
public abstract class AnimalFactory {

    public abstract  Animal createAnimal();

   // public abstract Animal newAnimal();
}

- 创建狗方法 继承动物

package lesson.animal.animal;

/**
 * User: 彭家琪
 * Date: 2019/9/10   17:07
 */
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗吃猫");
    }
}

- 创建狗工厂

package lesson.animal.animal;

/**
 * User: 彭家琪
 * Date: 2019/9/10   17:09
 */
public class DogFactory extends AnimalFactory {
    @Override
    public Animal createAnimal() {
        Dog dog = new Dog();
        dog.setName("旺财旺财");
        dog.setColor("yellow");
        return dog;
    }
}

- 创建猪属性

package lesson.animal.animal;

/**
 * User: 彭家琪
 * Date: 2019/9/10   17:08
 */
public class Pig  extends Animal{
    @Override
    public void eat() {
        System.out.println("猪吃菜");
    }
}

- 猪工厂

package lesson.animal.animal;

/**
 * User: 彭家琪
 * Date: 2019/9/10   17:09
 */
public class PigFactory extends AnimalFactory {
    @Override
    public Animal createAnimal() {
        Pig pig = new Pig();
        pig.setName("ddd");
        pig.setColor("red");
        return pig;
    }
}

简单工厂模式概述和代码实现

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

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

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

动物属性

package lesson.animal.moder;

/**
 * User: 彭家琪
 * Date: 2019/9/10   17:10
 */
public abstract class Animal {

    private String name;
    private  String color;

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Animal{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public abstract void eat();
}

- 动物工厂

package lesson.animal.moder;

/**
 * User: 彭家琪
 * Date: 2019/9/10   17:38
 */
public class AnimalFactory {

  /*  public static Dog createDog(){
        Dog dog = new Dog();
        return dog;
    }*/
        //抽象类和子类的关系  Animal可以是个接口
    public static Animal createDog(){
        Dog dog = new Dog();
        return dog;
    }
    public static Pig createPig(){
        Pig pig = new Pig();
        return pig;
    }
}

狗属性

package lesson.animal.moder;

/**
 * User: 彭家琪
 * Date: 2019/9/10   17:07
 */
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗吃猫.....");
    }
}

  • 猪属性
package lesson.animal.moder;

/**
 * User: 彭家琪
 * Date: 2019/9/10   17:08
 */
public class Pig  extends Animal {
    @Override
    public void eat() {
        System.out.println("猪吃菜....");
    }
}

测试类

package lesson.animal.moder;

/**
 * User: 彭家琪
 * Date: 2019/9/10   17:42
 */
public class Demo {
    public static void main(String[] args) {
   
        //创建对象,通过简单的工厂模式
        Animal dog = AnimalFactory.createDog();
        Pig pig = AnimalFactory.createPig();
        dog.setName("旺财");
        pig.setName("佩奇");

        System.out.println(dog);

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章