工厂模式
当需要创建一个对象时,只需要告诉工厂类即可,由工厂类去创建对象,调用者无需知道是如何创建的,也不用自己去创建。工厂模式分为简单工厂模式、工厂方法模式、抽象工厂模式
简单工厂模式
- 动态生成使用者所需类的对象, 使得各个模块各司其职,降低了系统的耦合性。
- 扩展性差,违背了开闭原则 新增产品时,需要修改工厂类。
public abstract class Product {
}
puclic class A extends Product{
}
puclic class B extends Product{
}
public class Factory {
public Product create(String type){
if(type="A"){
return new A();
} esle{
return new B();
}
}
}
public static void main(String[] args) {
Factory factory = new Factory ();
Product productA = factory.create("A");
Product productB = factory.create("B");
}
工厂方法模式
- 在简单方法中,我们是只有一个工厂类,由这个工厂类负责动态的创建我们所需要的对象
- 工厂方法模式中,每个对象都有自己的工厂,新增产品时,只需要扩展一个对应新的子工厂类即可
public abstract class Product {
}
puclic class A extends Product{
}
puclic class B extends Product{
}
public class FactoryA {
public Product create(){
return new A();
}
}
public class FactoryB {
public Product create(){
return new B();
}
}
public static void main(String[] args) {
Product productA = new FactoryA ().create();
Product productB = new FactoryB ().create("B");
}
抽象工厂模式
- 工厂方法模式针对的某一种产品,而抽象工厂模式可以针对多种产品
public interface IFactory {
//创建口罩
IMask createMask();
//创建防护服
IProtectiveSuit createSuit();
}
public class LowEndFactory implements IFactory {
@Override
public IMask createMask() {
IMask mask = new LowEndMask();
// .....
// LowEndMask的100行初始化代码
return mask;
}
@Override
public IProtectiveSuit createSuit() {
IProtectiveSuit suit = new LowEndProtectiveSuit();
// .....
// LowEndProtectiveSuit的100行初始化代码
return suit;
}
}
public class HighEndFactory implements IFactory {
@Override
public IMask createMask() {
IMask mask = new HighEndMask();
// .....
// HighEndMask的100行初始化代码
return mask;
}
@Override
public IProtectiveSuit createSuit() {
IProtectiveSuit suit = new HighEndProtectiveSuit();
// .....
// HighEndProtectiveSuit的100行初始化代码
return suit;
}
}
网友评论