一.工厂
简单工厂
package 简单工厂;
public abstract class animal {
public abstract void eat();
}
package 简单工厂;
public class cat extends animal {
public void eat() {
System.out.println("猫吃鱼");
}
}
package 简单工厂;
public class dog extends animal{
public void eat() {
System.out.println("狗吃骨头");
}
}
package 简单工厂;
public class Factory {
public static animal getAnimal(String s) {
if("cat".equals(s)) {
return new cat();
}else if("dog".equals(s)) {
return new dog();
}
return null;
}
}
package 简单工厂;
/**
*简单工厂模式--->静态工厂方法模式
*
* 设计一个工厂类:
* 工厂类提供一些静态方法,间接的去创建具体的对象
*优点:
* 不需要在创建具体类的对象,而是把创建的工作交给了工厂类来创建!
*弊端:如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护
*/
public class demo {
public static void main(String[] args) {
//常规建立cat和dog对象的步骤
cat c = new cat();
dog d = new dog();
//调用每个对象的方法
c.eat();
d.eat();
System.out.println("--------------------------");
//优化:加入工厂接口
//在工厂中使用多肽的方法建立猫狗对象
animal dog = Factory.getAnimal("dog");
animal cat = Factory.getAnimal("cat");
//但是如果输入没有建立的对象
animal pig = Factory.getAnimal("pig");
dog.eat();
cat.eat();
//java.lang.NullPointerException 空指针异常
//因为无法建立pig对象
pig.eat();
}
}
二.静态工厂设计
package 静态工厂;
public abstract class animal {
public abstract void eat();
}
package 静态工厂;
public class cat extends animal {
public void eat() {
System.out.println("猫吃鱼");
}
}
package 静态工厂;
public class catfac implements factory {
@Override
public animal getanimal() {
return new cat();
}
}
package 静态工厂;
public class dog extends animal{
public void eat() {
System.out.println("狗吃骨头");
}
}
package 静态工厂;
public class dogfac implements factory {
@Override
public animal getanimal() {
return new dog();
}
}
package 静态工厂;
public interface factory {
public abstract animal getanimal();
}
package 静态工厂;
/**工厂方法模式
* 提供一个抽象类(抽象工厂)还需要提供一个接口(工厂接口),每一个具体的类都有对应的工厂类(实现工厂接口)
* 具体对象的创建工作由继承抽象工厂的具体类实现
*
*优点:
* 客户端不需要在负责对象的创建(不需显示创建具体对象),从而明确了各个类的职责,
* 如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
弊端:
书写代码量大了!
*/
public class demo {
public static void main(String[] args) {
//通过cat的工厂建立对象
catfac catf = new catfac();
//对象调用方法建立cat的对象
animal cat = catf.getanimal();
cat.eat();
//通过dog的工厂建立对象
dogfac dogf = new dogfac();
//对象调用方法建立dog的对象
animal dog = dogf.getanimal();
dog.eat();
}
}