工厂模式属于创建者模式
之一,我们平常见得比较多,也是最常用的设计模式之一。一个工厂模式应该用到什么地方呢?
在我们的开发中有的时候会碰到一个接口可能会有多个实现类的情况。而这些实现类都重写了接口中的某一个抽象方法,为了便于管理,向外界隐藏创建对象的方式,我们可以再额外创建一个类A
。类A
中包含了获取实例对象的方法,在方法中实现了对每一个实现类对象的创建方式。每当我们需要使用某一个实现类时,我们都可以直接通过这个类A
去得到。这个类A
就像一个生产类的工厂一样向我们提供每一种实现类的对象。所以这种设计方式就叫做工厂模式
。
工厂模式设计图如下:
- 新建接口,用于提供一个方法模板,以供后面实现类去重写方法
代码如下:
public interface Animal {
void eat();
}
- 创建多个类去实现接口并重写接口里面的抽象方法
代码如下:
public class Bird implements Animal{
@Override
public void eat() {
System.out.println(" Bird implements Animal");
}
}
public class Cat implements Animal{
@Override
public void eat() {
System.out.println(" Cat implements Animal");
}
}
public class Dog implements Animal{
@Override
public void eat() {
System.out.println(" Dog implements Animal");
}
}
- 创建一个工厂类,并提供一个获取相关实现类对象的方法,通过传入指定的参数会创建相应的实现类
代码如下:
public class AnimalFactory {
public Animal getAnimal(String animalType){
if (animalType==null){
return null;
} else if (animalType.equalsIgnoreCase("Dog")) {
return new Dog();
} else if (animalType.equalsIgnoreCase("Cat")) {
return new Cat();
} else if (animalType.equalsIgnoreCase("Bird")) {
return new Bird();
}else {
return null;
}
}
}
- 创建测试类进行测试
代码实例:
public class FactoryDesignPatternTest {
public static void main(String[] args) {
//创建一个动物类工厂对象
AnimalFactory factory = new AnimalFactory();
//向动物工厂里面的方法传入指定参数可以通过参数返回指定的对象,生成多态的Animal
Animal rectangle = factory.getAnimal("Dog");
//通过多态获取指定对象的重写方法
rectangle.eat();
Animal square = factory.getAnimal("Cat");
square.eat();
Animal circle = factory.getAnimal("Bird");
circle.eat();
}
}
- 结果如下
Dog implements Animal
Cat implements Animal
Bird implements Animal
. 创造设计模式
工厂模式
、抽象工厂模式、单例模式、原型模式、Builder模式
结构设计模式
- 适配器(Adapter)模式、桥接(Bridge)模式、组合模式、装饰者(Decorator)模式、外观(Facade)模式、享元(Flyweight)模式、代理(Proxy)模式
行为设计模式
- 责任链模式、命令模式、解释器模式、迭代器模式、调解者(Mediator)模式、备忘录模式、观察者模式、状态模式、策略模式、模板模式、访问者模式