- 创建抽象工厂
- 创建抽象产品
- 创建具体产品
- 创建具体工厂
- 客户端调用
package designpattern.create.factorymethod.pattern;
public abstract class Factory {
public abstract Product createProduct();
public Product getObject(){
return createProduct();
}
}
package designpattern.create.factorymethod.pattern;
public interface Product {
}
package designpattern.create.factorymethod.pattern;
public class ProductA implements Product{
}
package designpattern.create.factorymethod.pattern;
public class ProductAFactory extends Factory{
@Override
public Product createProduct() {
return new ProductA();
}
}
package designpattern.create.factorymethod;
import designpattern.create.factorymethod.pattern.Factory;
import designpattern.create.factorymethod.pattern.ProductAFactory;
public class Client {
public static void main(String[] args) {
Factory factoryA = new ProductAFactory();
System.out.println(factoryA.getObject());
}
}
特点:对修改关闭,每一个产品需要一个工厂。
案例:URLStreamHandlerFactory
设计原则(设计模式每篇都有)
原则 | 解释 |
---|---|
开闭原则 | 对扩展开放,对修改关闭 |
单一职责 | 一个类应该只有一个发生变化的原因 |
里氏替换 | 任何基类可以出现的地方,子类一定可以出现 |
依赖倒置 | 面向接口编程,依赖于抽象而不依赖于具体 |
接口隔离 | 使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好 |
迪米特法则 | 只与你的直接朋友交谈,不跟“陌生人”说话 |