工厂模式:工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替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...");
}
}
具体产品2package 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();
}
}
这是结尾。。。