简单工厂
简单工厂
实现同一个接口,根据类型返回不同的对象值。
- 公共接口
public interface Toy {
void make();
}
- 实现接口
package com.dawn.design.factory;
/**
* @Auther: dawn
* @Date: 2020/1/13 13:17
* @Description:
*/
public class TankToy implements Toy {
@Override
public void make() {
System.out.println("坦克玩具");
}
}
/**
* 工厂实现类
*/
class ToyFactory {
/**
* 根据不同的类型返回不同对象
* type 可以弄成常量
*/
static Toy produce(String type) {
if (type.equals("1")) {
return new TankToy();
}
return null;
}
public static void main(String[] args) {
Toy toy = ToyFactory.produce("1");
toy.make();
}
}
工厂方法模式
如果简单工厂的type传错了就会导致创建实例失败,所以换一种方式
- 通过方法返回
public class ComplexToyFactory {
static Toy method1(){
return new TankToy();
}
static Toy method2(){
return new ComToy();
}
}
通过不同的方法来设定返回类型。
- 通过抽象工厂类实现
abstract class AbstractFactory{
Toy createToy();
}
class TankFactory extends AbstractFactory{
@Override
Toy createToy(){
return new TankToy();
}
}
两种方案都可以实现
优点 :
- 更符合开-闭原则。新增一种产品时,只需要增加相应的具体产品类和相应的工厂子类即可
- 符合单一职责原则,每个具体工厂类只负责创建对应的产品
- 不使用静态工厂方法,可以形成基于继承的等级结构
缺点:
- 每次新增产品和工厂都会创建类,增加系统开销和开发成本。
- 一个具体工厂只能创建一种具体产品
- 增加了系统的抽象性和理解难度
总结:工厂模式可以说是简单工厂模式的进一步抽象和拓展,在保留了简单工厂的封装优点的同时,让扩展变得简单,让继承变得可行,增加了多态性的体现
抽象工厂模型
引用地址
https://blog.csdn.net/qq564425/article/details/81082242
总结
按需要进行选择,杀鸡无用牛刀