较为方便的创建对象的方式
优点:较为方便的创建对象的方式,不用考虑内部实现方法
缺点:违反的高内聚的原则,如果新添加具体类,就必须修改工厂
实现方式
1.创建抽象产品角色(抽象类或接口,所有类的父类,包含公共的功能)
2.创建具体产品角色(实现类,继承抽象类)
3.创建工厂角色(通过传递参数,静态方法返回具体类的对象,由工厂传入的参数决定生成的对象)
1.抽象产品角色
//产品类
//抽象产品角色
//所有具体产品的父类定义的产品的公有方法
abstract class Animal{
abstract void eat();//公有方法
}
2.创建具体产品角色
<span style="font-size:10px;">//具体产品角色
//产品的具体实现
class Dog extends Animal{
void eat() {
System.out.println("狗吃骨头");
}
}
//具体产品角色
//产品的具体实现
class Cat extends Animal{
void eat() {
System.out.println("猫吃鱼");
}
}</span>
3.创建工厂角色(如果添加新的具体类必须修改工厂)
//工厂类
//工厂角色
//负责创建所有的对象的工厂
class SimpleFactory{
<span style="white-space:pre"> </span>//根据参数创建具体类
public static Animal createAnimal(String type){
if("dog".equals(type.toLowerCase())){
return new Dog();
}else if("cat".equals(type.toLowerCase())){
return new Cat();
}
return null;
}
}
测试类
public class Main {
public static void main(String[] args) {
Animal a = SimpleFactory.createAnimal("dog");
a.eat();
a = SimpleFactory.createAnimal("cat");
a.eat();
}
}
输出
狗吃骨头
猫吃鱼