工厂模式

工厂模式工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。

编程思想多个类似的子类继承同一个父类,对其父类中的变量进行操作。

举个栗子:一个生产鞋子的工厂,先生产一个通用的鞋子模型,然后在这个模型上增加各种颜色,花样。


抽象产品

package com.winter.Util.june.DesignPattern.FactoryPattern;

public interface Animal {
    void song();
}

具体产品1

package com.winter.Util.june.DesignPattern.FactoryPattern;

public class Cat implements Animal {

    @Override
    public void song() {
        System.out.println("Cat song...");
    }
}
具体产品2
package com.winter.Util.june.DesignPattern.FactoryPattern;

public class Dog implements Animal {

    @Override
    public void song() {
        System.out.println("Dog song...");
    }
}

具体产品3

package com.winter.Util.june.DesignPattern.FactoryPattern;

public class Pig implements Animal {

    @Override
    public void song() {
        System.out.println("Pig song...");
    }
}

简单工厂

package com.winter.Util.june.DesignPattern.FactoryPattern;

public class AnimalFactory {
    public Animal getAnimal(String animal){
        if(animal == null){
            return null;
        }
        if(animal.equalsIgnoreCase("Cat")){
            return new Cat();
        } else if(animal.equalsIgnoreCase("Dog")){
            return new Dog();
        } else if(animal.equalsIgnoreCase("Pig")){
            return new Pig();
        }
        return null;
    }
}

客户端

package com.winter.Util.june.DesignPattern.FactoryPattern;

public class TestFactoryPattern {
    public static void main(String args[]){
        AnimalFactory animalFactory=new AnimalFactory();
        Animal cat= animalFactory.getAnimal("cat");
        cat.song();
        Animal dog= animalFactory.getAnimal("dog");
        dog.song();
        Animal pig= animalFactory.getAnimal("pig");
        pig.song();
    }
}

这只是个简单的工厂,存在缺陷后面再改进。。。

工厂方法模式:

上面的程序如果现在要加一种动物就需要修改AnimalFactory类的方法。改进如下,将AnimalFactory改为接口然后每种动物定义各自的工厂。

public interface AnimalFactory {
    Animal createAnimal();
}
public class CatFactory implements AnimalFactory{


    @Override
    public Animal createAnimal() {
        return new Cat();
    }
}
public class DogFactory implements AnimalFactory{

    @Override
    public Animal createAnimal() {
        return new Dog();
    }
}
public class PigFactory implements AnimalFactory {
    @Override
    public Animal createAnimal() {
        return new Pig();
    }
}
public class TestFactorMothed {
    public static void main(String args[]){
        AnimalFactory animalFactory=new DogFactory();
        Dog dog= (Dog) animalFactory.createAnimal();
        dog.song();
        AnimalFactory animalFactory1=new CatFactory();
        Cat cat= (Cat) animalFactory1.createAnimal();
        cat.song();

    }
}


这是结尾。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值