工厂方法模式

工厂方法模式概述

工厂方法模式中"抽象工厂类"负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的"具体类"实现。

A:优点

        (1)客户端不需要再负责对象的创建,从而明确了各个类的职责;

        (2)如果有新的对象增加,只需要增加"一个具体的类和具体的工厂类"即可,不影响已有的代码,后期"维护"容易,增强了系统的扩展性

说明:优点2也是与静态工厂模式相比的优点(可以理解是对静态工厂模式的一个优化)

B:缺点: 需要额外的编写代码,增加了工作量

设计上:抽象工厂类不负责创建具体的对象,而是提供一个模板,由继承该抽象工厂类的子具体工厂类来实现,如果有新对象的添加,只需要添加一个具体的类和具体的工厂类即可

具体实现:提前定义用于创建对象的接口(抽象工厂),让子类(子工厂)决定实例化具体的某一个类,总厂只负责调度,具体创建由自工厂生产;即:在工厂和具体产品中间增加接口,工厂不再负责产品的创建,由接口针对不同条件返回具体的类实例,由具体类实例去实现。

例1

 

AnimalFactory

package www.wzj.factorymethod;

public interface  AnimalFactory {

     Animal createAnimal();//接口默认是public static
}

Animal

package www.wzj.factorymethod;

public abstract class Animal {

    public abstract void eat();//抽象类
}

CatFactory

package www.wzj.factorymethod;

public class CatFactory implements AnimalFactory {
    @Override
    public Animal createAnimal() {

        return new Cat();
    }
}

DogFactory

package www.wzj.factorymethod;

public class DogFactory implements AnimalFactory {

    public Animal createAnimal(){
        
        return new Dog();
    }
}

Cat

package www.wzj.factorymethod;

public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

Dog

package www.wzj.factorymethod;

public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗啃狗头");
    }
}

Test

package www.wzj.factorymethod;

public class Test {

    public static void main(String[] args) {

        AnimalFactory animalFactory = new DogFactory();//(1)得到实际工厂类的对象
        Animal animal = animalFactory.createAnimal();//(2)用具体的工厂类创建具体的对象
        animal.eat();//具体类的方法

        new CatFactory().createAnimal().eat();


    }
}

抽象工厂模式(也叫工具箱)---后续补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值