文化馆网站建设解决方案,企业备案网站可以做论坛吗,线上教学网站,亚马逊跨境电商个人开店抽象工厂模式#xff08;Abstract Factory Pattern#xff09;#xff1a;提供一个创建一系列相关或相互依赖对象的接口#xff0c;而无须指定它们具体的类。抽象工厂模式又称为Kit模式#xff0c;它是一种对象创建型模式。
由于工厂方法模式中的每个工厂只生产一类产品Abstract Factory Pattern提供一个创建一系列相关或相互依赖对象的接口而无须指定它们具体的类。抽象工厂模式又称为Kit模式它是一种对象创建型模式。
由于工厂方法模式中的每个工厂只生产一类产品可能会导致系统中存在大量的工厂类势必会增加系统的开销。此时可以考虑将一些相关的产品组成一个“产品族”由同一个工厂来统一生产。
sqlServerFactory和AccessFactory都能查询部门表和用户表选择sqlServerFactory采用sqlserver获取数据选择AccessFactory采用Access获取数据。 类比上图猫工厂和狗工厂都能产生动物和食物选择猫工厂产生猫和猫粮选择狗工厂产生狗和狗粮。
首先定义产品的接口
// 抽象产品A动物
public interface Animal {void makeSound();
}// 抽象产品B食物
public interface Food {void eat();
}然后创建实现这些接口的具体产品类
// 具体产品A1狗
public class Dog implements Animal {Overridepublic void makeSound() {System.out.println(汪汪汪);}
}// 具体产品A2猫
public class Cat implements Animal {Overridepublic void makeSound() {System.out.println(喵喵喵);}
}// 具体产品B1狗粮
public class DogFood implements Food {Overridepublic void eat() {System.out.println(吃狗粮);}
}// 具体产品B2猫粮
public class CatFood implements Food {Overridepublic void eat() {System.out.println(吃猫粮);}
}
接下来定义抽象工厂接口其中包含创建产品的方法
// 抽象工厂
public interface AnimalFactory {Animal createAnimal();Food createFood();
}
然后创建实现了抽象工厂接口的具体工厂类
// 具体工厂A狗工厂
public class DogFactory implements AnimalFactory {Overridepublic Animal createAnimal() {return new Dog();}Overridepublic Food createFood() {return new DogFood();}
}// 具体工厂B猫工厂
public class CatFactory implements AnimalFactory {Overridepublic Animal createAnimal() {return new Cat();}Overridepublic Food createFood() {return new CatFood();}
}
最后客户端代码使用具体工厂类来创建产品对象并调用它们的方法
public class Client {public static void main(String[] args) {// 创建狗工厂AnimalFactory dogFactory new DogFactory();Animal dog dogFactory.createAnimal();Food dogFood dogFactory.createFood();dog.makeSound(); // 输出汪汪汪dogFood.eat(); // 输出吃狗粮// 创建猫工厂AnimalFactory catFactory new CatFactory();Animal cat catFactory.createAnimal();Food catFood catFactory.createFood();cat.makeSound(); // 输出喵喵喵catFood.eat(); // 输出吃猫粮}
}如果增加一个牛需要添加牛工厂牛牛粮等才能实现。
这样做改动太大太过笨拙选择配置文件反射简单工厂抽象工厂来实现 DataAccess类用反射技术取代IFactory、SqlserverFactory和AccessFactory。
sqlserver可采用读取配置文件的方式赋值。确定db后利用反射加载相应的类去除if解除分支判断带来的耦合