简单工厂模式
具体实现
新建一个简单工厂对象,由它完成所需对象的实例化
好处
由工厂来完成对对象的初始化,这样需求方只需要对接工厂即可,减少和被需求对象的联系
编码实现
public class Test{
public static void main(String[] args){
Car car = new SimpleFactory(blue).makeCar();
}
}
class SimpleFactory{
String color;
public SimpleFactory(String color){
this.color = color;
}
public changeColor(String color){
this.color = color;
}
public Car makeCar(String color){
return new Car(color);
}
}
class Car{
String color;
public car(String color){
this.color = color;
}
}
工厂方法模式
具体实现
将创建对象的方法传入对象,具体的子类根据自身情况具体实现
特点
减少了工厂类,改用类的静态方法,减少了类,却达到了工厂的基本要求
缺点是工厂类和产品类冗余在了一起,架构不是很清晰
编码实现
public class Test{
public static void main(String[] args){
Car car = new SimpleFactory(blue).makeCar();
}
}
Interface SimpleCar{
String color;
public static Car makeCar(String color);
}
class Car implements SimpleCar{
String color;
private car(String color){
this.color = color;
}
public Car makeCar(String color){
return new Car(color);
}
}
抽象工厂模式
抽象的工厂类可以拥有多个抽象方法,继承的子工厂会完成对一整组所需产品的实例化
特点
将工厂之间相同部分进行了再次抽象,客户只需要取到对应具体子工厂,子工厂会完成对所有组件的实例化,最大程度保留了工厂不变的部分。但有一个问题,那就是每次增加了一个组件时,全部工厂都需要改变。
编码实现
public class Test{
public static void main(String[] args){
Car car = new SimpleFactory(blue).makeCar();
}
}
class abstract SimpleFactory{
String color;
public SimpleFactory(String color){
this.color = color;
}
public changeColor(String color){
this.color = color;
}
public abstract Car makeCar(String color)
}
class CarFactory extends SimpleFactory{
@Override
public Car makeCar(String color){
super.color= color;
}
}
class Car{
String color;
public car(String color){
this.color = color;
}
}