工厂方法模式概述
- 工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。
- 优点
*客户端不需要在负责对象的创建,从而明确了各个类的职责
*如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码
*后期维护容易,增强了系统的扩展性
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);
}
}