软件设计七大原则

它存在的目的很简单:定义一个创建对象的接口。
组成:
工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻 辑。在java中它往往由一个具体类实现。
抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

package simpleFactory;
public interface car {
void name();
}
package simpleFactory;
public class tesla implements car{
@Override
public void name() {
System.out.println("特斯拉");
}
}
package simpleFactory;
public class wuLing implements car{
@Override
public 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 {
@Override
public Car createCarFactory() {
return new BiyadiCar();
}
}
public class BiyadiFactory implements CarFactory{
@Override
public Car createCarFactory() {
return new BiyadiCar();
}
}
public class HongqiFactory implements CarFactory{
@Override
public Car createCarFactory() {
return new HongqiCar();
}
}
//测试
public static void main(String[] args) {
HongqiFactory hongqiFactory = new HongqiFactory();
Car carFactory = hongqiFactory.createCarFactory();
carFactory.createCar();
}
}
//输出:生产比亚迪
结论:用户只需要知道具体工厂的名字,就可以得到想要的产品。
其满足单一原则,开闭原则,但是灵活性较差。
抽象工厂由抽象工厂,具体工厂,抽象产品和具体产品等4个要素构成
结构如下:
