设计模式之工厂方法模式

工厂模式是设计模式中创建者模式非常重要的一种,一般有工厂模式,工厂方法模式,抽象工厂模式。这次主要谈一下工厂方法模式。
接口就是定义规则,抽象类就是定义部分的规则,具体类就是干活的,关于模式的理想原则就是面向对象几大原则
开闭,里氏代换,依赖倒置,迪米特(最小知识),接口隔离,合成复用。

  • 工厂方法模式
    定义一个抽象的工厂客户端用以声明引用,具体工厂类实现抽象工厂完成产品实例化。定义产品接口,里面包含产品的行为和属性,定义具体产品实现类。
    包含四个对象:抽象工厂,具体工厂,抽象产品,具体产品。
    关系如图:设计模式之工厂方法模式_第1张图片
    代码示例:
public class FactoryMethod {
    public static void main(String[] args) {
        // 实例化具体工厂
        ComputerFactory computerFactory = new DellComputerFactory();
        computerFactory.function().work();
        // 引用指向新的工厂
        computerFactory = new ASUSComputerFactory();
        computerFactory.function().work();
    }
}
// 工厂接口
interface ComputerFactory {
    Computer function();
}
// 实现工厂
class DellComputerFactory implements ComputerFactory {
    @Override
    public Computer function() {
        return new DellComputer();
    }
}
// 实现工厂
class ASUSComputerFactory implements ComputerFactory {
    @Override
    public Computer function() {
        return new ASUSComputer();
    }
}
// 抽象产品接口
interface Computer {
    void work();
}
// 实现产品
class DellComputer implements Computer{
    public void work(){
        System.out.println("i am dell computer , i am work!");
    }
}
// 实现产品
class ASUSComputer implements Computer{
    public void work(){
        System.out.println("i am ASUS computer, i am work!");
    }
}

运行结果:
i am dell computer , i am work!
i am ASUS computer, i am work!

  • 各角色
    抽象工厂接口:负责定义创建规则,该接口里的方法返回的产品,在客户端调用的时候将类的实例化延迟到了实现工厂当中去。
    工厂实现类:完成产品的实例化,这里可以完成很多类的组装成产品,客户端直接调用方法,这里也降低了耦合性。
    产品接口:定义产品的规则。
    产品实现类:完成产品具体的方法。
    工厂方法模式优点是可以降低系统的耦合度和增加了系统的扩展性,但是增加了设计的复杂性。

你可能感兴趣的:(设计模式,面向对象,工厂模式)