1.工厂方法模式:
1)工厂方法模式:
工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由
继承抽象工厂的具体类实现。
2)利弊:
优点:具体的工厂类负责创建当前具体的实例,结构层次很清晰,有具体类/工厂类/抽象工厂(接口)
弊端:有新的类型增加,需要编写外的代码,所有代码增加,导致工作量增加了
3)案例:
* 抽象的动物类
*/
public abstract class Animal {
public abstract void eat() ;
public abstract void sleep() ;
}
* 猫的工厂类
*/
public class CatFactory implements Factory {
@Override
public Animal createAnimal() { //抽象类多态
return new Cat();
}
}
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼...");
}
@Override
public void sleep() {
System.out.println("猫躺着睡...");
}
}
* 狗的工厂类
*/
public class DogFactory implements Factory{
@Override
public Animal createAnimal() {
return new Dog() ;
}
}
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃骨头...");
}
@Override
public void sleep() {
System.out.println("狗趴着睡...");
}
}
* 工厂接口
*/
public interface Factory { //抽象工厂(接口比抽象类还抽象)
Animal createAnimal() ; //抽象方法:创建动物
}
* 工厂方法模式:
* 工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。
* 优点:具体的工厂类负责创建当前具体的实例,结构层次很清晰,有具体类/工厂类/抽象工厂(接口)
* 弊端:有新的类型增加,需要编写外的代码,所有代码增加,导致工作量增加了
*/
public class FactoryMethod {
public static void main(String[] args) {
//抽象类多态
Animal a = new Cat() ;
a.eat() ;
a.sleep() ;
a = new Dog() ;
a.eat();
a.sleep() ;
System.out.println("--------------------------------------------") ;
//优化:使用工厂方法模式
Factory factory = new DogFactory() ;
Animal animal = factory.createAnimal();
animal.eat() ;
animal.sleep() ;
factory = new CatFactory() ;
Animal animal2 = factory.createAnimal();
animal2.eat() ;
animal2.sleep() ;
}
}