设计模式之工厂方法模式

来源:互联网 发布:ai2017汉化包for mac 编辑:程序博客网 时间:2024/06/06 13:18

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

  • 工厂方法模式
    定义一个抽象的工厂客户端用以声明引用,具体工厂类实现抽象工厂完成产品实例化。定义产品接口,里面包含产品的行为和属性,定义具体产品实现类。
    包含四个对象:抽象工厂,具体工厂,抽象产品,具体产品。
    关系如图:这里写图片描述
    代码示例:
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!

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