软件设计七大原则
它存在的目的很简单:定义一个创建对象的接口。
组成:
工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻 辑。在java中它往往由一个具体类实现。
抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
package simpleFactory;
public interface car {void name();
}
package simpleFactory;public class tesla implements car{@Overridepublic void name() {System.out.println("特斯拉");}
}
package simpleFactory;public class wuLing implements car{@Overridepublic void name() {System.out.println("五菱");}
}
package simpleFactory;public class carFactory {public static car getCar(String car){if (car.equals("wuLing")){return new wuLing();}else if (car.equals("tesla")){return new tesla();}else {return null;}}
}
package simpleFactory;
public class consumer {public static void main(String[] args) {car wuLing = carFactory.getCar("wuLing");car tesla = carFactory.getCar("tesla");wuLing.name();tesla.name();}
}
专门定义一个工厂类负责创建其他类的实例,最大的优点在于工厂类
中包含了必要的逻辑,根据客户需要的条件动态实例化相关的类。
当需要增加一种产品时,比如ProductC就需要修改简单工厂类SimpleFactory(增加if-else块),这违背了开闭原则。
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。
//创建工厂接口CarFactory:public interface CarFactory {Car createCarFactory();
}
//创建具体类型的工厂:public class BenzFactory implements CarFactory {@Overridepublic Car createCarFactory() {return new BiyadiCar();}
}
public class BiyadiFactory implements CarFactory{@Overridepublic Car createCarFactory() {return new BiyadiCar();}
}
public class HongqiFactory implements CarFactory{@Overridepublic Car createCarFactory() {return new HongqiCar();}
}
//测试public static void main(String[] args) {HongqiFactory hongqiFactory = new HongqiFactory();Car carFactory = hongqiFactory.createCarFactory();carFactory.createCar();}
}
//输出:生产比亚迪
结论:用户只需要知道具体工厂的名字,就可以得到想要的产品。
其满足单一原则,开闭原则,但是灵活性较差。
抽象工厂由抽象工厂,具体工厂,抽象产品和具体产品等4个要素构成
结构如下: